Merge branch 'master' of 212.68.92.75:public/lx-office-erp
authorG. Richardson <information@lx-office-hosting.de>
Mon, 16 Apr 2012 12:10:04 +0000 (14:10 +0200)
committerG. Richardson <information@lx-office-hosting.de>
Mon, 16 Apr 2012 12:10:04 +0000 (14:10 +0200)
60 files changed:
SL/Common.pm
SL/Controller/CsvImport/Part.pm
SL/DATEV.pm
SL/Form.pm
SL/ReportGenerator.pm
bin/mozilla/admin.pl
bin/mozilla/am.pl
bin/mozilla/datev.pl
bin/mozilla/dn.pl
bin/mozilla/ic.pl
bin/mozilla/login.pl
bin/mozilla/menu.pl
css/Win2000/menu.css [new symlink]
css/Win2000/menuv3.css [deleted symlink]
css/Win2000/menuv4.css [deleted symlink]
css/kivitendo/csshover.htc [new file with mode: 0644]
css/kivitendo/dhtmlsuite/menu-bar.css [new file with mode: 0644]
css/kivitendo/dhtmlsuite/menu-item.css [new file with mode: 0644]
css/kivitendo/frame_header [new symlink]
css/kivitendo/jquery.autocomplete.css [new symlink]
css/kivitendo/jquery.multiselect2side.css [new symlink]
css/kivitendo/main.css [new file with mode: 0644]
css/kivitendo/menu.css [new file with mode: 0644]
css/kivitendo/tabcontent.css [new file with mode: 0644]
css/kivitendo/ui-lightness [new symlink]
css/lx-office-erp/menu.css
image/kivitendo.png [new file with mode: 0644]
locale/de/all
peppershop/ArtikelErpToShop.php
peppershop/ArtikelShopToErp.php
peppershop/BestellungShopToErp.php
peppershop/dblib.php
peppershop/erplib.php
peppershop/pepper.php
templates/webpages/acctranscorrections/analyze_filter.html
templates/webpages/acctranscorrections/analyze_overview.html
templates/webpages/acctranscorrections/assistant_for_ap_ar_wrong_taxkeys.html
templates/webpages/acctranscorrections/assistant_for_invoice_inventory_with_taxkeys.html
templates/webpages/acctranscorrections/assistant_for_wrong_taxkeys.html
templates/webpages/admin/adminlogin.html
templates/webpages/admin/check_auth_database.html
templates/webpages/admin/create_standard_group_ask.html
templates/webpages/admin/restore_dataset.html
templates/webpages/ar/form_header.html
templates/webpages/ct/form_header.html
templates/webpages/datev/net_gross_difference.html
templates/webpages/dbupgrade/buchungsgruppen_header.html
templates/webpages/dbupgrade/units_header.html
templates/webpages/dbupgrade/warehouse_form.html
templates/webpages/dbupgrade/warning.html
templates/webpages/login/auth_db_needs_update.html
templates/webpages/login/auth_db_unreachable.html
templates/webpages/login/authentication_pl_missing.html
templates/webpages/login/company_logo.html
templates/webpages/login/login_screen.html
templates/webpages/login/old_configuration_files.html
templates/webpages/menu/header.html
templates/webpages/oe/form_header.html
templates/webpages/payment_term/form.html
xtcom/confedit.php

index 371bb8a..726c4c8 100644 (file)
@@ -43,7 +43,7 @@ sub unique_id {
 }
 
 sub tmpname {
-  return "/tmp/lx-office-tmp-" . unique_id();
+  return "/tmp/kivitendo-tmp-" . unique_id();
 }
 
 sub retrieve_parts {
index ca9d22a..387bdb5 100644 (file)
@@ -198,7 +198,12 @@ sub check_existing {
 
   if ($self->settings->{article_number_policy} eq 'update_prices') {
     if ($entry->{part}) {
-      map { $entry->{part}->$_( $object->$_ ) } qw(sellprice listprice lastcost prices);
+      map { $entry->{part}->$_( $object->$_ ) } qw(sellprice listprice lastcost);
+
+      # merge prices
+      my %prices_by_pricegroup_id = map { $_->pricegroup->id => $_ } $entry->{part}->prices, $object->prices;
+      $entry->{part}->prices(grep { $_ } map { $prices_by_pricegroup_id{$_->id} } @{ $self->all_pricegroups });
+
       push @{ $entry->{information} }, $::locale->text('Updating prices of existing entry in database');
       $entry->{object_to_save} = $entry->{part};
     }
index 8d6a63d..bfb48d0 100644 (file)
@@ -429,8 +429,7 @@ sub _get_transactions {
       if (   !$ref->{invoice}   # we have a non-invoice booking (=gl)
           &&  $ref->{is_tax}    # that has "is_tax" set
           && !($prev_ref->{is_tax})  # previous line wasn't is_tax
-          &&  (_sign($ref->{amount}) == _sign($prev_ref->{amount})))  # and sign same as previous sign
-          {
+          &&  (_sign($ref->{amount}) == _sign($prev_ref->{amount}))) {  # and sign same as previous sign
         $trans->[$i - 1]->{tax_amount} = $ref->{amount};
       }
     }
index 84d64bd..8d28f84 100644 (file)
@@ -501,7 +501,7 @@ sub header {
     push @header, "<meta http-equiv='refresh' content='$refresh_time;$refresh_url'>";
   }
 
-  push @header, map { qq|<link rel="stylesheet" href="$_" type="text/css" title="Lx-Office stylesheet">| } $self->use_stylesheet;
+  push @header, map { qq|<link rel="stylesheet" href="$_" type="text/css" title="Stylesheet">| } $self->use_stylesheet;
 
   push @header, "<style type='text/css'>\@page { size:landscape; }</style>" if $self->{landscape};
   push @header, "<link rel='shortcut icon' href='$self->{favicon}' type='image/x-icon'>" if -f $self->{favicon};
@@ -595,7 +595,7 @@ sub set_standard_title {
   $::lxdebug->enter_sub;
   my $self = shift;
 
-  $self->{titlebar}  = "Lx-Office " . $::locale->text('Version') . " $self->{version}";
+  $self->{titlebar}  = "kivitendo " . $::locale->text('Version') . " $self->{version}";
   $self->{titlebar} .= "- $::myconfig{name}"   if $::myconfig{name};
   $self->{titlebar} .= "- $::myconfig{dbname}" if $::myconfig{name};
 
@@ -1114,7 +1114,7 @@ sub parse_template {
   $suffix =  $self->{IN};
   $suffix =~ s/.*\.//;
   ($temp_fh, $self->{tmpfile}) = File::Temp::tempfile(
-    'lx-office-printXXXXXX',
+    'kivitendo-printXXXXXX',
     SUFFIX => '.' . ($suffix || 'tex'),
     DIR    => $userspath,
     UNLINK => 1,
index f81435e..3f5cdeb 100644 (file)
@@ -204,8 +204,11 @@ sub set_custom_headers {
 sub get_attachment_basename {
   my $self     = shift;
   my $filename =  $self->{options}->{attachment_basename} || 'report';
+
+  # FIXME: this is bonkers. add a real sluggify method somewhere or import one.
   $filename    =~ s|.*\\||;
   $filename    =~ s|.*/||;
+  $filename    =~ s| |_|g;
 
   return $filename;
 }
@@ -228,6 +231,7 @@ sub generate_with_headers {
     print $self->generate_html_content();
 
   } elsif ($format eq 'csv') {
+    # FIXME: don't do mini http in here
     my $filename = $self->get_attachment_basename();
     print qq|content-type: text/csv\n|;
     print qq|content-disposition: attachment; filename=${filename}.csv\n\n|;
index ff4641a..95c0303 100755 (executable)
@@ -124,7 +124,7 @@ sub adminlogin {
   my $form   = $main::form;
   my $locale = $main::locale;
 
-  $form->{title} = qq|Lx-Office ERP $form->{version} | . $locale->text('Administration');
+  $form->{title} = qq|kivitendo $form->{version} | . $locale->text('Administration');
 
   $form->header();
   print $form->parse_html_template('admin/adminlogin');
@@ -367,7 +367,7 @@ sub list_users {
     $_->{login_url} =  $::locale->is_utf8 ? Encode::encode('utf-8-strict', $_->{login}) : $_->{login_url};
   }
 
-  $form->{title}   = "Lx-Office ERP " . $locale->text('Administration');
+  $form->{title}   = "kivitendo " . $locale->text('Administration');
   $form->{LOCKED}  = -e _nologin_file_name();
   $form->{MEMBERS} = [ @members{sort { lc $a cmp lc $b } keys %members} ];
 
@@ -376,7 +376,7 @@ sub list_users {
 }
 
 sub add_user {
-  $::form->{title}   = "Lx-Office ERP " . $::locale->text('Administration') . " / " . $::locale->text('Add User');
+  $::form->{title}   = "kivitendo " . $::locale->text('Administration') . " / " . $::locale->text('Add User');
 
 # Note: Menu Style 'v3' is not compatible to all browsers!
 # "menustyle"    => "old" sets the HTML Menu to default.
@@ -397,7 +397,7 @@ sub add_user {
 }
 
 sub edit_user {
-  $::form->{title} = "Lx-Office ERP " . $::locale->text('Administration') . " / " . $::locale->text('Edit User');
+  $::form->{title} = "kivitendo " . $::locale->text('Administration') . " / " . $::locale->text('Edit User');
   $::form->{edit}  = 1;
 
   # get user
@@ -653,7 +653,7 @@ sub dbselect_source {
   $form->{dbdefault} = 'template1';
   $form->{dbhost}    = $::auth->{DB_config}->{host} || 'localhost';
 
-  $form->{title}     = "Lx-Office ERP / " . $locale->text('Database Administration');
+  $form->{title}     = "kivitendo / " . $locale->text('Database Administration');
 
   # Intentionnaly disabled unless fixed to work with the authentication DB.
   $form->{ALLOW_DBBACKUP} = 0; # "$pg_dump_exe" ne "DISABLED";
@@ -689,7 +689,7 @@ sub update_dataset {
   my $form              = $main::form;
   my $locale            = $main::locale;
 
-  $form->{title}        = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Update Dataset');
+  $form->{title}        = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Update Dataset');
 
   my @need_updates      = User->dbneedsupdate($form);
   $form->{NEED_UPDATES} = \@need_updates;
@@ -794,7 +794,7 @@ sub create_dataset {
     }
   }
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
 
   $form->header();
   print $form->parse_html_template("admin/create_dataset");
@@ -808,7 +808,7 @@ sub dbcreate {
 
   User->dbcreate(\%$form);
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
 
   $form->header();
   print $form->parse_html_template("admin/dbcreate");
@@ -821,7 +821,7 @@ sub delete_dataset {
   my @dbsources = User->dbsources_unused($form);
   $form->error($locale->text('Nothing to delete!')) unless @dbsources;
 
-  $form->{title}     = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
+  $form->{title}     = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
   $form->{DBSOURCES} = [ map { { "name", $_ } } sort @dbsources ];
 
   $form->header();
@@ -838,7 +838,7 @@ sub dbdelete {
 
   User->dbdelete(\%$form);
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
   $form->header();
   print $form->parse_html_template("admin/dbdelete");
 }
@@ -847,7 +847,7 @@ sub backup_dataset {
   my $form       = $main::form;
   my $locale     = $main::locale;
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
 
   if ($::lx_office_conf{applications}->{pg_dump} eq "DISABLED") {
     $form->error($locale->text('Database backups and restorations are disabled in the configuration.'));
@@ -859,7 +859,7 @@ sub backup_dataset {
 
   my $username  = getpwuid $UID || "unknown-user";
   my $hostname  = hostname() || "unknown-host";
-  $form->{from} = "Lx-Office Admin <${username}\@${hostname}>";
+  $form->{from} = "kivitendo Admin <${username}\@${hostname}>";
 
   $form->header();
   print $form->parse_html_template("admin/backup_dataset");
@@ -869,7 +869,7 @@ sub backup_dataset_start {
   my $form       = $main::form;
   my $locale     = $main::locale;
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
 
   my $pg_dump_exe = $::lx_office_conf{applications}->{pg_dump} || "pg_dump";
 
@@ -945,7 +945,7 @@ sub backup_dataset_start {
     unlink "${tmpdir}/.pgpass", $tmp;
     rmdir $tmpdir;
 
-    $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
+    $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
 
     $form->header();
     print $form->parse_html_template("admin/backup_dataset_email_done");
@@ -956,7 +956,7 @@ sub restore_dataset {
   my $form       = $main::form;
   my $locale     = $main::locale;
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
 
   if ($::lx_office_conf{applications}->{pg_restore} eq "DISABLED") {
     $form->error($locale->text('Database backups and restorations are disabled in the configuration.'));
@@ -981,7 +981,7 @@ sub restore_dataset_start {
   my $form       = $main::form;
   my $locale     = $main::locale;
 
-  $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
+  $form->{title} = "kivitendo " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
 
   my $pg_restore_exe = $::lx_office_conf{applications}->{pg_restore} || "pg_restore";
 
index 28b1a52..7549bc1 100644 (file)
@@ -1066,7 +1066,7 @@ sub config {
   }
 
   $form->{STYLESHEETS} = [];
-  foreach my $item (qw(lx-office-erp.css Win2000.css Mobile.css)) {
+  foreach my $item (qw(lx-office-erp.css Win2000.css Mobile.css kivitendo.css)) {
     push @{ $form->{STYLESHEETS} }, {
       'name'     => $item,
       'value'    => $item,
index 8915d2f..f3dbc2e 100644 (file)
@@ -138,7 +138,7 @@ sub download {
   $main::auth->assert('datev_export');
 
   my $tmp_name = Common->tmpname();
-  my $zip_name = strftime("lx-office-datev-export-%Y%m%d.zip", localtime(time()));
+  my $zip_name = strftime("kivitendo-datev-export-%Y%m%d.zip", localtime(time()));
 
   my $cwd = getcwd();
 
index 07b1000..627f696 100644 (file)
@@ -135,7 +135,7 @@ sub show_invoices {
     map { $row->{$_} = $form->format_amount(\%myconfig, $row->{$_} * 1, -2) } qw(amount open_amount fee interest);
 
     if ($row->{'language_id'}) {
-      $row->{language} = SL::DB::Manager::Language->find_by('id' => $row->{'language_id'})->{'description'};
+      $row->{language} = SL::DB::Manager::Language->find_by_or_create('id' => $row->{'language_id'})->{'description'};
     }
   }
 
index 2ada087..0b607da 100644 (file)
@@ -1844,7 +1844,7 @@ sub save {
         qw(weight listprice sellprice rop);
 
       $form->{assembly_rows}--;
-      $i = $newform{rowcount};
+      $i = $form->{assembly_rows};
       $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"});
 
       $form->{sellprice} -= $form->{"sellprice_$i"} * $form->{"qty_$i"};
index b5b0f17..3c90891 100644 (file)
@@ -168,7 +168,7 @@ sub company_logo {
   $form->{todo_list}  =  create_todo_list('login_screen' => 1) if (!$form->{no_todo_list});
 
   $form->{stylesheet} =  $myconfig{stylesheet};
-  $form->{title}      =  $::locale->text('Lx-Office');
+  $form->{title}      =  $::locale->text('kivitendo');
   $form->{interface}  = $::dispatcher->interface_type;
 
   # create the logo screen
index 7910957..d464c85 100644 (file)
@@ -84,7 +84,7 @@ sub acc_menu {
   my $framesize    = _calc_framesize() - 2;
   my $menu         = Menu->new("menu.ini");
   $mainlevel       = $::form->{level};
-  $::form->{title} = $::locale->text('Lx-Office');
+  $::form->{title} = $::locale->text('kivitendo');
   $::form->header;
 
   print qq|
diff --git a/css/Win2000/menu.css b/css/Win2000/menu.css
new file mode 120000 (symlink)
index 0000000..5f5d76c
--- /dev/null
@@ -0,0 +1 @@
+../lx-office-erp/menu.css
\ No newline at end of file
diff --git a/css/Win2000/menuv3.css b/css/Win2000/menuv3.css
deleted file mode 120000 (symlink)
index 1bd817a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../lx-office-erp/menuv3.css
\ No newline at end of file
diff --git a/css/Win2000/menuv4.css b/css/Win2000/menuv4.css
deleted file mode 120000 (symlink)
index 6f69e0f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../lx-office-erp/menuv4.css
\ No newline at end of file
diff --git a/css/kivitendo/csshover.htc b/css/kivitendo/csshover.htc
new file mode 100644 (file)
index 0000000..e2dcced
--- /dev/null
@@ -0,0 +1,121 @@
+<attach event="ondocumentready" handler="parseStylesheets" />\r
+<script>\r
+/**\r
+ *     Whatever:hover - V2.02.060206 - hover, active & focus\r
+ *     ------------------------------------------------------------\r
+ *     (c) 2005 - Peter Nederlof\r
+ *     Peterned - http://www.xs4all.nl/~peterned/\r
+ *     License  - http://creativecommons.org/licenses/LGPL/2.1/\r
+ *\r
+ *     Whatever:hover is free software; you can redistribute it and/or\r
+ *     modify it under the terms of the GNU Lesser General Public\r
+ *     License as published by the Free Software Foundation; either\r
+ *     version 2.1 of the License, or (at your option) any later version.\r
+ *\r
+ *     Whatever:hover is distributed in the hope that it will be useful,\r
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ *     Lesser General Public License for more details.\r
+ *\r
+ *     Credits and thanks to:\r
+ *     Arnoud Berendsen, Martin Reurings, Robert Hanson\r
+ *\r
+ *     howto: body { behavior:url("csshover.htc"); }\r
+ *     ------------------------------------------------------------\r
+ */\r
+\r
+var csshoverReg = /(^|\s)((([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active))|((a|input|textarea)([#.][^ ]+)?:unknown)/i,\r
+currentSheet, doc = window.document, hoverEvents = [], activators = {\r
+       onhover:{on:'onmouseover', off:'onmouseout'},\r
+       onactive:{on:'onmousedown', off:'onmouseup'},\r
+       onunknown:{on:'onfocus', off:'onblur'}\r
+}\r
+\r
+function parseStylesheets() {\r
+       if(!/MSIE (5|6)/.test(navigator.userAgent)) return;\r
+       window.attachEvent('onunload', unhookHoverEvents);\r
+       var sheets = doc.styleSheets, l = sheets.length;\r
+       for(var i=0; i<l; i++) \r
+               parseStylesheet(sheets[i]);\r
+}\r
+       function parseStylesheet(sheet) {\r
+               if(sheet.imports) {\r
+                       try {\r
+                               var imports = sheet.imports, l = imports.length;\r
+                               for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);\r
+                       } catch(securityException){}\r
+               }\r
+\r
+               try {\r
+                       var rules = (currentSheet = sheet).rules, l = rules.length;\r
+                       for(var j=0; j<l; j++) parseCSSRule(rules[j]);\r
+               } catch(securityException){}\r
+       }\r
+\r
+       function parseCSSRule(rule) {\r
+               var select = rule.selectorText, style = rule.style.cssText;\r
+               if(!csshoverReg.test(select) || !style) return;\r
+               \r
+               var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');\r
+               var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);\r
+               var className = (/\.([a-z0-9_-]*on(hover|active|unknown))/i).exec(newSelect)[1];\r
+               var affected = select.replace(/:(hover|active|unknown).*$/, '');\r
+               var elements = getElementsBySelect(affected);\r
+               if(elements.length == 0) return;\r
+\r
+               currentSheet.addRule(newSelect, style);\r
+               for(var i=0; i<elements.length; i++)\r
+                       new HoverElement(elements[i], className, activators[pseudo]);\r
+       }\r
+\r
+function HoverElement(node, className, events) {\r
+       if(!node.hovers) node.hovers = {};\r
+       if(node.hovers[className]) return;\r
+       node.hovers[className] = true;\r
+       hookHoverEvent(node, events.on, function() { node.className += ' ' + className; });\r
+       hookHoverEvent(node, events.off, function() { node.className = node.className.replace(new RegExp('\\s+'+className, 'g'),''); });\r
+}\r
+       function hookHoverEvent(node, type, handler) {\r
+               node.attachEvent(type, handler);\r
+               hoverEvents[hoverEvents.length] = { \r
+                       node:node, type:type, handler:handler \r
+               };\r
+       }\r
+\r
+       function unhookHoverEvents() {\r
+               for(var e,i=0; i<hoverEvents.length; i++) {\r
+                       e = hoverEvents[i]; \r
+                       e.node.detachEvent(e.type, e.handler);\r
+               }\r
+       }\r
+\r
+function getElementsBySelect(rule) {\r
+       var parts, nodes = [doc];\r
+       parts = rule.split(' ');\r
+       for(var i=0; i<parts.length; i++) {\r
+               nodes = getSelectedNodes(parts[i], nodes);\r
+       }       return nodes;\r
+}\r
+       function getSelectedNodes(select, elements) {\r
+               var result, node, nodes = [];\r
+               var identify = (/\#([a-z0-9_-]+)/i).exec(select);\r
+               if(identify) {\r
+                       var element = doc.getElementById(identify[1]);\r
+                       return element? [element]:nodes;\r
+               }\r
+               \r
+               var classname = (/\.([a-z0-9_-]+)/i).exec(select);\r
+               var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');\r
+               var classReg = classname? new RegExp('\\b' + classname[1] + '\\b'):false;\r
+               for(var i=0; i<elements.length; i++) {\r
+                       result = tagName? elements[i].all.tags(tagName):elements[i].all; \r
+                       for(var j=0; j<result.length; j++) {\r
+                               node = result[j];\r
+                               if(classReg && !classReg.test(node.className)) continue;\r
+                               nodes[nodes.length] = node;\r
+                       }\r
+               }       \r
+               \r
+               return nodes;\r
+       }\r
+</script>
\ No newline at end of file
diff --git a/css/kivitendo/dhtmlsuite/menu-bar.css b/css/kivitendo/dhtmlsuite/menu-bar.css
new file mode 100644 (file)
index 0000000..71fa9b3
--- /dev/null
@@ -0,0 +1,36 @@
+/************************************************************************************************************\r
+\r
+       DHTML Suite for Applications\r
+       (C) www.dhtmlgoodies.com, August 2006\r
+\r
+       CSS for the DHTMLsuite_tableWidget class.\r
+\r
+       Terms of use:\r
+       Look at the terms of use at http://www.dhtmlgoodies.com/index.html?page=termsOfUse\r
+\r
+       Thank you!\r
+\r
+       www.dhtmlgoodies.com\r
+       Alf Magne Kalleland\r
+\r
+************************************************************************************************************/\r
+\r
+.DHTMLSuite_menuBar_top{       /* The bar that is parent of the menu strip */\r
+       height:26px;\r
+       width:100%;\r
+       background-repeat:repeat-x;\r
+       font-family: sans-serif, Verdana, Arial, Helvetica;\r
+       font-size:12px;\r
+       z-index:100000;\r
+       padding-left:10px;\r
+}\r
+\r
+.DHTMLSuite_menuBar_sub{\r
+       position:absolute;\r
+       background-color:#FFF;\r
+       border:1px solid #D1D1D1;\r
+       background-repeat:repeat-y;\r
+       background-position: left center;\r
+       display:inline;\r
+}\r
+\r
diff --git a/css/kivitendo/dhtmlsuite/menu-item.css b/css/kivitendo/dhtmlsuite/menu-item.css
new file mode 100644 (file)
index 0000000..604b730
--- /dev/null
@@ -0,0 +1,158 @@
+/* CSS FOR MENU ITEM OF TYPE "top" */\r
+\r
+.DHTMLSuite_menuItem_top_regular,.DHTMLSuite_menuItem_top_over,.DHTMLSuite_menuItem_top_click,.DHTMLSuite_menuItem_top_disabled,.DHTMLSuite_menuItem_top_active{\r
+       height:19px;\r
+       line-height:16px;\r
+       margin-right:2px;\r
+       margin-top:1px;\r
+       padding-left:4px;\r
+       padding-right:4px;\r
+       padding-top:2px;\r
+       padding-bottom:2px;\r
+}\r
+.DHTMLSuite_menuItem_top_regular div,.DHTMLSuite_menuItem_top_over div,.DHTMLSuite_menuItem_top_click div,.DHTMLSuite_menuItem_top_disabled div,.DHTMLSuite_menuItem_top_active div{\r
+       padding-top:2px;\r
+       padding-bottom:2px;\r
+}\r
+.DHTMLSuite_menuItem_top_regular{      /* Top level menu item - Regular state */\r
+       cursor:pointer;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_over{ /* Top level menu item - Mouse over state */\r
+       color:#FE5F14;\r
+       background-color:#D1D1D1;\r
+       cursor:pointer;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_active{       /* Top level menu item - Active state - this is typical the state for menu item 1 when a sub group is expanded and the mouse is located over one of the sub menu items */\r
+       cursor:pointer;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_click{        /* Top level menu item - Mouse click state */\r
+       color:#FE5F14;\r
+       background-color:#D1D1D1;\r
+       cursor:pointer;\r
+       z-index:20000;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_disabled{     /* Disabled menu item */\r
+       cursor:default;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_disabled img,.DHTMLSuite_menuItem_top_disabled div{   /* Sub divs of disabled top level items. A menu item is a div with some subdivs(one for the icon, one for text etc.). this is the css for these sub divs */\r
+       filter:alpha(opacity=40);       /* Transparency */\r
+       opacity:0.4;    /* Transparency */\r
+       -moz-opacity:0.4;       /* Transparency */\r
+       -khtml-opacity:.4;      /* Transparency */\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_disabled div,.DHTMLSuite_menuItem_top_active div, .DHTMLSuite_menuItem_top_click div, .DHTMLSuite_menuItem_top_regular div,.DHTMLSuite_menuItem_top_over div{ /* divs for the text,icon and arrow of a menu item */\r
+       float:left;\r
+       padding-left:1px;\r
+       padding-right:1px;\r
+}\r
+\r
+/* CSS FOR THE SMALL ARROW DIV - WHEN YOU CLICK ON THIS DIV, SUB ELEMENTS WILL SHOW */\r
+.DHTMLSuite_menuItem_top_arrowShowSub{ /* This is the arrow for top level elements */\r
+       width:12px;     /* Width of item */\r
+       background-repeat:no-repeat;    /* No background repeat for the arrow */\r
+       background-position:center center;      /* Position of the arrow. at the center of this div */\r
+       background-image: url('../../../image/dhtmlsuite/menu_strip_down_arrow.png');   /* Relative path to the arrow */\r
+       margin:0px;\r
+       margin-right:-1px;      /* -1 pixel is added to get the arrow a little bit more to the right. this is because of the right padding of top level items */\r
+       padding:0px;\r
+       height:16px;\r
+       margin-left:2px;\r
+       float:right;\r
+}\r
+\r
+.DHTMLSuite_menuItem_top_over .DHTMLSuite_menuItem_top_arrowShowSub,\r
+.DHTMLSuite_menuItem_top_click .DHTMLSuite_menuItem_top_arrowShowSub\r
+{      /* Sub menu arrows */\r
+       margin-left:1px;\r
+       border-left:1px solid #000;\r
+}\r
+\r
+/* CSS FOR SEPARATOR */\r
+\r
+.DHTMLSuite_menuItem_separator_top{    /* Separator of type "top" */\r
+       height:20px;\r
+       margin-top:3px;\r
+       margin-bottom:3px;\r
+       width:4px;\r
+       padding-left:3px;\r
+       padding-right:3px;\r
+       background-repeat:repeat-y;\r
+       background-image:url('../../../image/dhtmlsuite/menu_strip_separator.gif');\r
+\r
+}\r
+\r
+\r
+/* CSS FOR MENU ITEM OF TYPE "sub" */\r
+\r
+.DHTMLSuite_menuItem_sub_regular, .DHTMLSuite_menuItem_sub_over,.DHTMLSuite_menuItem_sub_click,.DHTMLSuite_menuItem_sub_disabled,.DHTMLSuite_menuItem_sub_active{      /* Commom css for regular, mouse over and mouse click items */\r
+       clear:both;\r
+       line-height:18px;       /* Height of menu item */\r
+       height:18px;            /* Height of menu item */\r
+       padding-left:25px;      /* Space inside the menu item - the 25 pixels are used in order to avoid text overlapping menu item icon */\r
+       padding-right:4px;      /* Space inside the menu item */\r
+       padding-top:2px;        /* Space inside the menu item */\r
+       padding-bottom:2px;      /* Space inside the menu item */\r
+       cursor:pointer;         /* Mouse cursor set to a "hand" */\r
+       margin:1px;     /* A little space around the item */\r
+       background-repeat:no-repeat;    /* No background repeat */\r
+}\r
+.DHTMLSuite_menuItem_sub_disabled{     /* Disabled sub menu item */\r
+       cursor:default; /* Arrow as cursor instead of hand */\r
+}\r
+.DHTMLSuite_menuItem_sub_disabled div,.DHTMLSuite_menuItem_sub_disabled{       /* Disabled sub menu item - Here, we apply the rules on the divs inside the element, i.e. the div for the icon, text and arrow */\r
+       filter:alpha(opacity=40);       /* Transparency */\r
+       opacity:0.4;    /* Transparency */\r
+       -moz-opacity:0.4;       /* Transparency */\r
+       -khtml-opacity:.4;      /* Transparency */\r
+}\r
+.DHTMLSuite_menuItem_sub_regular,.DHTMLSuite_menuItem_sub_disabled{    /* Regular menu item */\r
+}\r
+\r
+.DHTMLSuite_menuItem_sub_over,.DHTMLSuite_menuItem_sub_click,.DHTMLSuite_menuItem_sub_active{\r
+}\r
+\r
+.DHTMLSuite_menuItem_sub_over,.DHTMLSuite_menuItem_sub_active{ /* Mouse over effect */\r
+       color:#FE5F14;\r
+       background-color:#D1D1D1;\r
+}\r
+\r
+.DHTMLSuite_menuItem_sub_click{        /* Mouse click effect */\r
+       color:#FE5F14;\r
+       background-color:#D1D1D1;\r
+}\r
+\r
+.DHTMLSuite_menuItem_sub_click div, .DHTMLSuite_menuItem_sub_regular div,.DHTMLSuite_menuItem_sub_over div,.DHTMLSuite_menuItem_sub_active div,.DHTMLSuite_menuItem_sub_disabled div{  /* divs for the text,icon and arrow of a menu item */\r
+       float:left;             /* To get the icons and text of sub elements side by side */\r
+       padding-left:1px;\r
+       padding-right:1px;\r
+\r
+}\r
+.DHTMLSuite_menuItem_sub_arrowShowSub{ /* Arrow div for sub elements (Right pointing arrow ) */\r
+       position:absolute;      /* Never change this one */\r
+       background-image:url('../../../image/dhtmlsuite/menu-bar-right-arrow.png');     /* Path relative to the css file */\r
+       width:18px;\r
+       height:18px;\r
+       text-align:right;\r
+       right:0px;\r
+       background-repeat:no-repeat;    /* No background repeat */\r
+       background-position: center right;      /* Position of arrow */\r
+}\r
+\r
+\r
+.DHTMLSuite_menuItem_separator_sub{    /* Separator of type "sub" */\r
+       height:1px;     /* Height of separator */\r
+       margin-top:1px; /* Space above the separator */\r
+       margin-bottom:1px;      /* Space below the separator */\r
+       margin-left:24px;       /* left margin because we don't want the separator to cover the gradient */\r
+       padding-right:3px;      /* space at the right of the separator */\r
+       color:#FE5F14;\r
+       background-color:#D1D1D1;\r
+}\r
+\r
+\r
diff --git a/css/kivitendo/frame_header b/css/kivitendo/frame_header
new file mode 120000 (symlink)
index 0000000..d69ab7f
--- /dev/null
@@ -0,0 +1 @@
+../lx-office-erp/frame_header/
\ No newline at end of file
diff --git a/css/kivitendo/jquery.autocomplete.css b/css/kivitendo/jquery.autocomplete.css
new file mode 120000 (symlink)
index 0000000..dc11231
--- /dev/null
@@ -0,0 +1 @@
+../lx-office-erp/jquery.autocomplete.css
\ No newline at end of file
diff --git a/css/kivitendo/jquery.multiselect2side.css b/css/kivitendo/jquery.multiselect2side.css
new file mode 120000 (symlink)
index 0000000..270f1a2
--- /dev/null
@@ -0,0 +1 @@
+../lx-office-erp/jquery.multiselect2side.css
\ No newline at end of file
diff --git a/css/kivitendo/main.css b/css/kivitendo/main.css
new file mode 100644 (file)
index 0000000..46e4ba1
--- /dev/null
@@ -0,0 +1,355 @@
+/* Stylesheet for kivitendo * Name:kivitendo.css*/
+/* Colortable
+
+Background:    #EBEBEB burlywood
+Links:                 #006400 DarkGreen
+Link-hover             #FE5F14 Orange / #FFFFE0 lightyellow
+Titles, BG/VG: #79B61B Mid-green FFFFFF White
+Tabcolor: #CAFFA3
+*/
+
+
+body {
+       font-family: Verdana, Arial, Helvetica;
+       background-color: #FFFFFF;
+       color: #000000;
+    font-size: 9pt;
+}
+
+
+/* The look of links */
+a {
+       padding: 0 0.2em;
+       text-decoration: none;
+       /* border-bottom: thin solid; */
+       /* font-weight: bold; */
+}
+A:link, A:visited, A:active {
+       color: #000000;
+       border-bottom: thin solid #FE5F14;
+}
+a:hover {
+       color: #FE5F14;
+       background-color: #D1D1D1;
+}
+a.selected:hover {
+       color:#EBEBEB;
+}
+a.nomobile {
+       background-color:transparent;
+       border:none;
+}
+
+table {
+    font-size: 90% !important;
+       table-layout: auto;
+       border-spacing: 0.3em;
+}
+
+/* table a {
+       color:#FE5F14 !important;
+       border-bottom:none;
+} */
+
+ul {
+}
+
+hr {
+       background-color: #006400;
+       border: none;
+       color: #79B61B;
+       height: 2px;
+}
+
+/* I.E. & Chrome können das nicht! */
+/* input[type="radio"], input[type="checkbox"]{
+       width:1.15em;
+       height:1.15em;
+       border:1px solid;
+       color: #006400;
+} */
+input:focus, textarea:focus, select:focus {
+       background-color: #FFFFA0;
+       border: 2px solid #FE5F14;
+       /* border-bottom: medium solid #FE5F14; */
+}
+/* Fängt den "Schrink" beim focus - problem für i.e. und chrome */
+/* input[type="radio"]:focus, input[type="checkbox"]:focus{
+       width:1.2em;
+       height:1.2em;
+} */
+td {
+       color: #000000;
+       font-weight: normal;
+}
+/* td.hover:hover {
+       color: #006400;
+       background-color: #FFFFE0;
+} */
+th {
+       color: #000000;
+       font-weight: bold;
+}
+/* login and admin */
+.login a, .login a:visited, .login a:hover {
+       text-decoration: none !important;
+       background-color:transparent !important;
+       border:none;
+}
+.login a:hover {
+       background: none;
+}
+body.login {
+       background-color: #FFFFE0;
+       color: #000000;
+}
+h1.login {
+}
+table.login {
+       background-color: #FFFFE0;
+       padding: 20px;
+}
+td.login {
+       text-align: center;
+}
+th.login {
+       text-align: right;
+}
+body.admin {
+       background-color: #FFFFE0;
+       color: #000000;
+}
+body.menu {
+       color: #000000;
+}
+/* Warnings */
+.message_error_login {
+       color: #000000;
+       border: 1px solid #8b0000;
+       background-color: #ffcccc;
+       padding: 3px;
+}
+.message_ok {
+       padding: 5px;
+       background-color: #ADFFB6;
+       color: black;
+       font-weight: bolder;
+       text-align: center;
+       border-style: solid;
+       border-width: thin;
+}
+.message_error {
+       padding: 5px;
+       background-color: #CC0000;
+       color: black;
+       font-weight: bolder;
+       text-align: center;
+       border-style: solid;
+       border-width: thin;
+}
+.message_hint {
+       padding: 0.5em;
+       background-color: #FFEE66;
+       color: black;
+       font-weight: bolder;
+       text-align: center;
+       border-style: solid;
+       border-width: thin;
+}
+.message_error_label {
+       padding: 0.5em;
+       background-color: #E00000;
+       font-weight: normal;
+       text-align: left;
+       border-style: solid;
+       border-width: thin;
+}
+/*    Headings */
+.listtop, h1, .tabcontent .listheading {
+    font-size:125%;
+       background-color: #006400;
+       text-align: left;
+       padding: 0.5em;
+       color: #FFFFFF;
+       font-weight: bolder;
+       border-style: none;
+       border-width: thin;
+       -moz-border-radius:0.4em; /* Firefox */
+       -webkit-border-radius:0.4em; /* Safari, Chrome */
+       -khtml-border-radius:0.4em; /* Konqueror */
+       border-radius:0.4em; /* CSS3 */
+       behavior:url(border-radius.htc);
+}
+
+/* .listelement {
+       background-color: #f8ffb3;
+       color: #000000;
+}
+.listelement2 {
+       background-color: #8ee085;
+       color: #000000;
+} */
+.listheading {
+       padding: 0.2em;
+       background-color: #EBEBEB;
+       color: #006400;
+       font-weight: bolder;
+       text-align: left;
+       border-style: none;
+}
+
+/* .listheadingcontent {
+       background-color: #EBEBEB;
+       color: #006400;
+       font-weight: bolder;
+       text-align: left;
+} */
+
+.accountlistheading {
+       padding: 0.3em;
+       color: #006400;
+       font-weight: bold;
+       text-align: left;
+       background-color: #EBEBEB;
+}
+.subsubheading {
+       color: #000000;
+       font-weight: bolder;
+       text-decoration: underline;
+}
+.optionen {
+       border: dashed;
+       border-width: 1px;
+       background: #FFFFE0;
+}
+.listrow1 {
+       background-color: #FFFFFF;
+       color: black;
+       vertical-align: top;
+}
+.listrow0 {
+       background-color: #FFFF99;
+       color: black;
+       vertical-align: top;
+}
+.listsubtotal {
+       background-color: rgb(236,233,216);
+       color: black;
+       font-weight: bolder;
+}
+.listtotal, .listtotal td {
+       background-color: rgb(236,233,216);
+       color: black;
+       font-weight: bolder;
+}
+/* Verkaufsbericht */
+.listmainsortheader {
+       background-color: rgb(236,233,216);
+       color: red;
+       font-weight: bolder;
+       padding-left: 10px;
+       padding-top: 0px;
+}
+.listmainsortsubtotal {
+       background-color: rgb(236,233,216);
+       color: red;
+       font-weight: bolder;
+       padding-left: 10px;
+}
+.listsubsortheader {
+       background-color: rgb(236,233,216);
+       color: green;
+       font-weight: bolder;
+       padding-left: 20px
+}
+.listsubsortsubtotal {
+       background-color: rgb(236,233,216);
+       color: green;
+       font-weight: bolder;
+       padding-left: 20px
+}
+.listsortdescription {
+       background-color: rgb(236,233,216);
+       color: black;
+       font-weight: normal;
+       padding-left: 30px
+}
+.submit {
+       font-family: Verdana, Arial, Helvetica;
+       color: #000000;
+}
+.checkbox, .radio {
+       font-family: Verdana, Arial, Helvetica;
+       color: #778899;
+}
+.plus0 {
+/* font color for negative numbers */
+       color: red;
+}
+.plus1 {
+       color: green;
+}
+h2.confirm {
+       color: blue;
+}
+h2.error {
+       color: red;
+}
+fieldset {
+       margin-top: 15px;
+       color: black;
+       font-weight: bolder;
+}
+/* media stuff */
+@media screen {
+.noscreen {
+/* items with this class won't display */
+       display: none;
+}
+}
+@media print {
+.noprint {
+/* items with this class won't print */
+       display: none;
+}
+}
+.filecontent {
+       border: 1px solid blue;
+       padding-left: 2px;
+       padding-right: 2px;
+}
+label {
+       cursor: pointer;
+       vertical-align: top;
+}
+.unbalanced_ledger {
+       background-color: #ffa0a0;
+}
+.clearfix:after {
+       clear: both;
+       content: ".";
+       display: block;
+       height: 0;
+       visibility: hidden;
+}
+.flash_message_error {
+       background-color: #FFD6D6;
+       border: 1px solid #AE0014;
+       margin-top: 5px;
+       margin-bottom: 5px;
+       padding: 5px;
+}
+.flash_message_warning {
+       background-color: #FFE8C7;
+       border: 1px solid #FF6600;
+       margin-top: 5px;
+       margin-bottom: 5px;
+       padding: 5px;
+}
+.flash_message_info {
+       background-color: #DCF2FF;
+       border: 1px solid #4690FF;
+       margin-top: 5px;
+       margin-bottom: 5px;
+       padding: 5px;
+}
diff --git a/css/kivitendo/menu.css b/css/kivitendo/menu.css
new file mode 100644 (file)
index 0000000..38b2669
--- /dev/null
@@ -0,0 +1,285 @@
+/* kivitendo menu Colors:
+Menu Background color #FE5F14
+orangemenu color #FFFFFF
+whiteMenu Hover background color #FFFFE0
+DarkGreensubenu pointer
+*/
+body.menuv4 {
+       behavior: url("css/csshover.htc");
+       /*font-size: 14pt;*/
+       line-height: 20pt;
+       font-family: Verdana, Geneva, Tahoma, sans-serif;
+       background-color: #FFFFFF;
+       color: #000000;
+}
+#menuv4 {
+       /*font-size: 85%;*/
+       width: 99.8%;
+       float: left;
+       /*border: 3px solid;*/
+       background-color: #FFFFFF;
+       color: #000000;
+       margin-top: 0.2em;
+}
+#menuv4 a, #menuv4 h2, #menuv4 div.x {
+       font-size: 80%;
+       line-height: 120%;
+       display: block;
+       border: 0;
+       white-space: nowrap;
+       margin: 0;
+       padding: 0.3em 1em;
+}
+#menuv4 h2:before {
+       content: " ";
+}
+#menuv4 h2:after {
+       content: " ";
+}
+#menuv4 h2 {
+       background-color: #ffffff;
+       color: #000000;
+       /*padding: 2px 15px;*/
+/* Firefox */
+       -moz-border-radius: 0.4em 0.4em 0;
+/* Safari, Chrome */
+       -webkit-border-radius: 0.4em 0.4em 0;
+/* Konqueror */
+       -khtml-border-radius: 0.4em 0.4em 0;
+/* CSS3 */
+       border-radius: 0.4em 0.4em 0 0;
+/*     behavior: url(border-radius.htc); */
+}
+#menuv4 ul:hover h2 {
+       background-color:#DCDCDC;
+}
+#menuv4 a, #menuv4 a:visited, #menuv4 div.x, #menuv4 div.x:visited {
+       color: #000000;
+       text-decoration: none;
+       padding-right: 10px;
+}
+#menuv4 a {
+       background: #EBEBEB;
+}
+#menuv4 div.x, #menuv4 div.x:visited {
+       background-color: #EBEBEB;
+       border-right: 1em solid #FE5F14;
+}
+#menuv4 div.x:hover {
+       border-right: none;
+}
+#menuv4 a:hover, #menuv4 div.x:hover {
+       color: #FE5F14;
+       background-color: #EBEBEB;
+}
+#menuv4 a:active, #menuv4 div.x:active {
+       color: #FE5F14;
+       background-color: #EBEBEB;
+}
+#menuv4 ul {
+       list-style: none;
+       margin: 0;
+       padding: 0;
+       float: left;
+}
+
+#menuv4 li {
+       position: relative;
+       float: none;
+       border: 0;
+}
+li.sub {
+       position: relativ;
+       left: 0.2em;
+       top: 0px;
+       background-color: #FFFFFF;
+}
+/* IE6 spacing bug fix, <li>s without a bottom border get spaced to far  * correction:the bug will change the height of the parent element! this will also cause the whole menu to grow  * so the only method to get this pile of crap going is to add a bottom border to the <li>s, where the enclosing <ul> already has * a bottom border, which just looks ugly * the trick:color the bottom border with the same color as the bottom pixel of the background image - noone notices */
+#menuv4 ul li {
+       /* border: solid;
+       border-color: #991900;
+       border-width: 0 0 1px 0;
+*/
+}
+#menuv4 ul ul {
+       padding: 0 2em 2em 2em;
+       margin: 0 -2em -2em -2em;
+}
+#menuv4 ul ul li {
+       /*padding-top: 0.01em;*/
+       background-color: #FFFFFF;
+}
+/* IE6 event bug fix, without a background there hovers will be occassionally lost between the li's to the layer below  * causing the menu to close. Opera 9 has the same bug btw. */
+#menuv4 ul ul {
+       position: absolute;
+       z-index: 500;
+       top: auto;
+       display: none;
+}
+#menuv4 ul ul ul {
+       top: 0;
+       left: 99%;
+       padding: 2em;
+       margin: -2em;
+}
+#menuv4 ul ul ul li {
+       border-left: 0.2em solid #EBEBEB;
+}
+/* Begin non-anchor hover selectors */
+/* Enter the more specific element (div) selectoron non-anchor hovers for IE5.x to comply with theolder version of csshover.htc - V1.21.041022. Itimproves IE's performance speed to use the olderfile and this method */
+div#menuv4 h2:hover {
+       background: #EBEBEB;
+       color: #FE5F14;
+}
+div#menuv4 li:hover {
+       cursor: pointer;
+       z-index: 100;
+}
+div#menuv4 li:hover ul ul, div#menuv4 li li:hover ul ul, div#menuv4 li li li:hover ul ul, div#menuv4 li li li li:hover ul ul {
+       display: none;
+}
+div#menuv4 li:hover ul, div#menuv4 li li:hover ul, div#menuv4 li li li:hover ul, div#menuv4 li li li li:hover ul {
+       display: block;
+       position: relativ: left: 10px;
+}
+/* End of non-anchor hover selectors */
+
+body.menuv3 {
+       behavior: url("css/csshover.htc");
+       /*font-size: 14pt;*/
+       line-height: 20pt;
+       font-family: Verdana, Geneva, Tahoma, sans-serif;
+       background-color: #FFFFFF;
+       color: #000000;
+}
+#menuv3 {
+       /*font-size: 85%;*/
+       width: 99.8%;
+       float: left;
+       /*border: 3px solid;*/
+       background-color: #FFFFFF;
+       color: #000000;
+       margin-top: 0.2em;
+}
+#menuv3 a, #menuv3 h2, #menuv3 div.x {
+       font-size: 80%;
+       line-height: 120%;
+       display: block;
+       border: 0;
+       white-space: nowrap;
+       margin: 0;
+       padding: 0.3em 1em;
+}
+#menuv3 h2:before {
+       content: " ";
+}
+#menuv3 h2:after {
+       content: " ";
+}
+#menuv3 h2 {
+       background-color: #ffffff;
+       color: #000000;
+       /*padding: 2px 15px;*/
+/* Firefox */
+       -moz-border-radius: 0.4em 0.4em 0;
+/* Safari, Chrome */
+       -webkit-border-radius: 0.4em 0.4em 0;
+/* Konqueror */
+       -khtml-border-radius: 0.4em 0.4em 0;
+/* CSS3 */
+       border-radius: 0.4em 0.4em 0 0;
+/*     behavior: url(border-radius.htc); */
+}
+#menuv3 ul:hover h2 {
+       background-color:#DCDCDC;
+}
+#menuv3 a, #menuv3 a:visited, #menuv3 div.x, #menuv3 div.x:visited {
+       color: #000000;
+       text-decoration: none;
+       padding-right: 10px;
+}
+#menuv3 a {
+       background: #EBEBEB;
+}
+#menuv3 div.x, #menuv3 div.x:visited {
+       background-color: #EBEBEB;
+       border-right: 1em solid #FE5F14;
+}
+#menuv3 div.x:hover {
+       border-right: none;
+}
+#menuv3 a:hover, #menuv3 div.x:hover {
+       color: #FE5F14;
+       background-color: #EBEBEB;
+}
+#menuv3 a:active, #menuv3 div.x:active {
+       color: #FE5F14;
+       background-color: #EBEBEB;
+}
+#menuv3 ul {
+       list-style: none;
+       margin: 0;
+       padding: 0;
+       float: left;
+}
+
+#menuv3 li {
+       position: relative;
+       float: none;
+       border: 0;
+}
+li.sub {
+       position: relativ;
+       left: 0.2em;
+       top: 0px;
+       background-color: #FFFFFF;
+}
+/* IE6 spacing bug fix, <li>s without a bottom border get spaced to far  * correction:the bug will change the height of the parent element! this will also cause the whole menu to grow  * so the only method to get this pile of crap going is to add a bottom border to the <li>s, where the enclosing <ul> already has * a bottom border, which just looks ugly * the trick:color the bottom border with the same color as the bottom pixel of the background image - noone notices */
+#menuv3 ul li {
+       /* border: solid;
+       border-color: #991900;
+       border-width: 0 0 1px 0;
+*/
+}
+#menuv3 ul ul {
+       padding: 0 2em 2em 2em;
+       margin: 0 -2em -2em -2em;
+}
+#menuv3 ul ul li {
+       /*padding-top: 0.01em;*/
+       background-color: #FFFFFF;
+}
+/* IE6 event bug fix, without a background there hovers will be occassionally lost between the li's to the layer below  * causing the menu to close. Opera 9 has the same bug btw. */
+#menuv3 ul ul {
+       position: absolute;
+       z-index: 500;
+       top: auto;
+       display: none;
+}
+#menuv3 ul ul ul {
+       top: 0;
+       left: 99%;
+       padding: 2em;
+       margin: -2em;
+}
+#menuv3 ul ul ul li {
+       border-left: 0.2em solid #EBEBEB;
+}
+/* Begin non-anchor hover selectors */
+/* Enter the more specific element (div) selectoron non-anchor hovers for IE5.x to comply with theolder version of csshover.htc - V1.21.041022. Itimproves IE's performance speed to use the olderfile and this method */
+div#menuv3 h2:hover {
+       background: #EBEBEB;
+       color: #FE5F14;
+}
+div#menuv3 li:hover {
+       cursor: pointer;
+       z-index: 100;
+}
+div#menuv3 li:hover ul ul, div#menuv3 li li:hover ul ul, div#menuv3 li li li:hover ul ul, div#menuv3 li li li li:hover ul ul {
+       display: none;
+}
+div#menuv3 li:hover ul, div#menuv3 li li:hover ul, div#menuv3 li li li:hover ul, div#menuv3 li li li li:hover ul {
+       display: block;
+       position: relativ: left: 10px;
+}
+/* End of non-anchor hover selectors */
diff --git a/css/kivitendo/tabcontent.css b/css/kivitendo/tabcontent.css
new file mode 100644 (file)
index 0000000..093dcc5
--- /dev/null
@@ -0,0 +1,193 @@
+/* ######### CSS for Shade Tabs. Remove if not using ######### */
+
+.shadetabs{
+padding: 3px 0;
+margin-left: 0;
+margin-top: 1px;
+margin-bottom: 0;
+font: bold 12px Verdana;
+list-style-type: none;
+text-align: left; /*set to left, center, or right to align the menu as desired*/
+}
+
+.shadetabs li{
+display: inline;
+margin: 0;
+}
+
+.shadetabs li a{
+text-decoration: none;
+position: relative;
+z-index: 1;
+padding: 3px 7px;
+margin-right: 3px;
+background-color:#A1A1A1;
+border-bottom: none ;
+color: #000000;
+-moz-border-radius:0.4em 0.4em 0 0; /* Firefox */
+-webkit-border-radius:0.4em 0.4em 0 0; /* Safari, Chrome */
+-khtml-border-radius:0.4em 0.4em 0 0; /* Konqueror */
+border-radius:0.4em 0.4em 0 0 ; /* CSS3 */
+behavior:url(border-radius.htc);
+border-bottom: thin solid #FE5F14;
+}
+
+.shadetabs li a:visited{
+color: #000000;
+border: none;
+background-color:#A1A1A1;
+border-bottom: none ;
+}
+
+.shadetabs li a:hover{
+color: #FE5F14;
+background-color:#EBEBEB;
+}
+
+.shadetabs li a.selected{ /*selected main tab style */
+position: relative;
+top: 1px;
+background-color: #D1D1D1;
+color:#000000;
+}
+
+.shadetabs li a.selected{ /*selected main tab style */
+border-bottom-color:#EBEBEB;
+}
+
+.shadetabs li a.selected:hover{ /*selected main tab style */
+text-decoration: none;
+}
+
+.tabcontent{
+display:none;
+}
+
+@media print {
+.tabcontent {
+display:block !important;
+}
+}
+
+/* ######### CSS for Inverted Modern Bricks II Tabs. Remove if not using ######### */
+
+.modernbricksmenu2{
+padding: 0;
+width: 362px;
+border-top: 5px solid #D25A0B; /*Brown color theme*/
+background: transparent;
+voice-family: "\"}\"";
+voice-family: inherit;
+}
+
+.modernbricksmenu2 ul{
+margin:0;
+margin-left: 10px; /*margin between first menu item and left browser edge*/
+padding: 0;
+list-style: none;
+}
+
+.modernbricksmenu2 li{
+display: inline;
+margin: 0 2px 0 0;
+padding: 0;
+text-transform:uppercase;
+}
+
+.modernbricksmenu2 a{
+float: left;
+display: block;
+font: bold 11px Arial;
+color: white;
+text-decoration: none;
+margin: 0 1px 0 0; /*Margin between each menu item*/
+padding: 5px 10px;
+background-color: black; /*Brown color theme*/
+border-top: 1px solid white;
+}
+
+.modernbricksmenu2 a:hover{
+background-color: #D25A0B; /*Brown color theme*/
+color: white;
+}
+
+.modernbricksmenu2 a.selected{ /*currently selected tab*/
+background-color: #D25A0B; /*Brown color theme*/
+color: white;
+border-color: #D25A0B; /*Brown color theme*/
+}
+
+.tabcontent{
+display:none;
+}
+
+@media print {
+.tabcontent {
+display:block !important;
+}
+}
+
+/* ######### CSS for Indented CSS Tabs. Remove if not using ######### */
+
+
+.indentmenu{
+font: bold 13px Arial;
+width: 100%; /*leave this value as is in most cases*/
+}
+
+.indentmenu ul{
+margin: 0;
+padding: 0;
+float: left;
+/* width: 80%; width of menu*/
+border-top: 1px solid navy; /*navy border*/
+background: black url(../image/indentbg.gif) center center repeat-x;
+}
+
+.indentmenu ul li{
+display: inline;
+}
+
+.indentmenu ul li a{
+float: left;
+color: white; /*text color*/
+padding: 5px 11px;
+text-decoration: none;
+border-right: 1px solid navy; /*navy divider between menu items*/
+}
+
+.indentmenu ul li a:visited{
+color: white;
+}
+
+.indentmenu ul li a.selected{
+color: white !important;
+padding-top: 6px; /*shift text down 1px*/
+padding-bottom: 4px;
+background: black url(../image/indentbg2.gif) center center repeat-x;
+}
+
+
+.tabcontentstyle{ /*style of tab content oontainer*/
+/* border: 1px solid #D2691E; */
+width: 95%;
+margin-bottom: 1em;
+padding: 10px;
+-moz-border-radius:0 0 0.4em 0.4em; /* Firefox */
+-webkit-border-radius:0 0 0.4em 0.4em; /* Safari, Chrome */
+-khtml-border-radius:0 0 0.4em 0.4em; /* Konqueror */
+border-radius:0 0 0.4em 0.4em; /* CSS3 */
+behavior:url(border-radius.htc);
+border: thin solid #A1A1A1;
+
+}
+
+.tabcontent{
+display:none;
+}
+
+@media print {
+.tabcontent {
+display:block !important;
+}
+}
diff --git a/css/kivitendo/ui-lightness b/css/kivitendo/ui-lightness
new file mode 120000 (symlink)
index 0000000..9f2cad0
--- /dev/null
@@ -0,0 +1 @@
+../lx-office-erp/ui-lightness/
\ No newline at end of file
index b9fbcda..be94243 100644 (file)
@@ -13,7 +13,7 @@ table.menunew {
   border-spacing: 0;
 }
 
-table.menunew td {
+table.menunew td {
   padding: 0;
   color:white;
   font-family: Verdana, Arial, sans-serif;
diff --git a/image/kivitendo.png b/image/kivitendo.png
new file mode 100644 (file)
index 0000000..7fc65c6
Binary files /dev/null and b/image/kivitendo.png differ
index 84d3ba1..cf22326 100644 (file)
@@ -32,7 +32,7 @@ $self->{texts} = {
   'A digit is required.'        => 'Eine Ziffer ist vorgeschrieben.',
   'A group named &quot;Full Access&quot; has been created.' => 'Eine Gruppe namens &quot;Vollzugriff&quot; wurde angelegt.',
   'A group with that name does already exist.' => 'Eine Gruppe mit diesem Namen gibt es bereits.',
-  'A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office 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 Lx-Office wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit möglich ist, jeden Aspekt von Lx-Office auch ohne Javascript zu benutzen, empfehlen wir es. In einer zukünftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
+  '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.',
   'A special character is required (valid characters: #1).' => 'Ein Sonderzeichen ist vorgeschrieben (gültige Zeichen: #1).',
   'A temporary directory could not be created:' => 'Ein tempor&auml;res Verzeichnis konnte nicht erstellt werden:',
@@ -626,7 +626,7 @@ $self->{texts} = {
   'Do you really want to delete this group?' => 'Gruppe wirklich l&ouml;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&ouml;schen?',
-  'Do you want Lx-Office to create a group for access to all functions?' => 'Wollen Sie, dass Lx-Office eine Gruppe mit Zugriff auf alle Funktionen anlegt?',
+  '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 &uuml;bernehmen, damit der H&auml;ndler die Waren direkt an Ihren Kunden liefern kann?',
   'Do you want to store the existing onhand values into a new warehouse?' => 'M&ouml;chten Sie die vorhandenen Mengendaten in ein Lager &uuml;bertragen?',
@@ -644,7 +644,7 @@ $self->{texts} = {
   'Due'                         => 'Fällig',
   'Due Date'                    => 'Fälligkeitsdatum',
   'Due Date missing!'           => 'Fälligkeitsdatum fehlt!',
-  'Due to security concerns these files have to be deleted or moved after the migration before you can continue using Lx-Office.' => 'Aus Sicherheitsgründen müssen diese Dateien nach erfolgter Migration gelöscht oder verschoben werden, bevor Lx-Office weiter genutzt werden kann.',
+  'Due to security concerns these files have to be deleted or moved after the migration before you can continue using kivitendo.' => 'Aus Sicherheitsgründen müssen diese Dateien nach erfolgter Migration gelöscht oder verschoben werden, bevor kivitendo weiter genutzt werden kann.',
   'Duedate +Days'               => 'Fällikeitsdatum +Tage',
   'Dunning'                     => 'Mahnung',
   'Dunning Amount'              => 'gemahnter Betrag',
@@ -662,7 +662,7 @@ $self->{texts} = {
   'Dunnings'                    => 'Mahnungen',
   'Duplicate in CSV file'       => 'Duplikat in CSV-Datei',
   'Duplicate in database'       => 'Duplikat in Datenbank',
-  'During this user migration Lx-Office can create such a group for you and grant all users access to all of Lx-Office\'s functions.' => 'Im Rahmen dieser Benutzerdatenmigration kann Lx-Office eine solche Gruppe f&uuml;r Sie anlegen und allen Benutzern Zugriff auf alle Lx-Office-Funktionen gew&auml;hren.',
+  '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&uuml;r Sie anlegen und allen Benutzern Zugriff auf alle kivitendo-Funktionen gew&auml;hren.',
   'E-mail'                      => 'eMail',
   'E-mail Statement to'         => 'Fälligkeitsabrechnung als eMail an',
   'E-mail address missing!'     => 'E-Mail-Adresse fehlt!',
@@ -680,7 +680,7 @@ $self->{texts} = {
   'EU without VAT ID'           => 'EU ohne UstId-Nummer',
   'EUER'                        => 'Einnahmen-/Überschussrechnung',
   'EUR'                         => 'E/Ü-Rechnung',
-  'Earlier versions of Lx-Office contained bugs which might have led to wrong entries in the general ledger.' => 'Frühere Versionen von Lx-Office enthielten Bugs, die zu falschen Einträgen im Hauptbuch geführt haben können.',
+  'Earlier versions of kivitendo contained bugs which might have led to wrong entries in the general ledger.' => 'Frühere Versionen von kivitendo enthielten Bugs, die zu falschen Einträgen im Hauptbuch geführt haben können.',
   'Edit'                        => 'Bearbeiten',
   'Edit Access Rights'          => 'Zugriffsrechte bearbeiten',
   'Edit Access Rights for Follow-Ups' => 'Zugriff auf meine Wiedervorlagen regeln',
@@ -786,7 +786,7 @@ $self->{texts} = {
   'Ertrag prozentual'           => 'Ertrag prozentual',
   'Escape character'            => 'Escape-Zeichen',
   'Exact'                       => 'Genau',
-  'Example: http://lx-office.org' => 'Beispiel:  http://lx-office.org',
+  'Example: http://kivitendo.de' => 'Beispiel:  http://kivitendo.de',
   'Excel'                       => 'Excel',
   'Exch'                        => 'Wechselkurs.',
   'Exchangerate'                => 'Wechselkurs',
@@ -829,7 +829,7 @@ $self->{texts} = {
   'Field'                       => 'Feld',
   'File'                        => 'Datei',
   'File name'                   => 'Dateiname',
-  'Files created by Lx-Office\'s &quot;Backup Dataset&quot; function are such files.' => 'Dateien, die von Lx-Office\' Funktion &quot;Datenbank sichern&quot; erstellt wurden, erf&uuml;llen diese Kriterien.',
+  'Files created by kivitendo\'s &quot;Backup Dataset&quot; function are such files.' => 'Dateien, die von kivitendo\'s Funktion &quot;Datenbank sichern&quot; erstellt wurden, erf&uuml;llen diese Kriterien.',
   'Filter'                      => 'Filter',
   'Filter date by'              => 'Datum filtern nach',
   'Finish'                      => 'Abschlie&szlig;en',
@@ -926,7 +926,7 @@ $self->{texts} = {
   'If you select a base unit then you also have to enter a factor.' => 'Wenn Sie eine Basiseinheit auswählen, dann müssen Sie auch einen Faktor eingeben.',
   'If you want to change any of these parameters then press the &quot;Back&quot; button, edit the file &quot;config/lx_office.conf&quot; and login into the admin module again.' => 'Wenn Sie einen der Parameter &auml;ndern wollen, so dr&uuml;cken Sie auf den &quot;Zur&uuml;ck&quot;-Button, bearbeiten Sie die Datei &quot;config/lx_office.conf&quot;, und melden Sie sich erneut im Administrationsbereich an.',
   'If you want to delete such a dataset you have to edit the user(s) that are using the dataset in question and have them use another dataset.' => 'Wenn Sie eine solche Datenbank l&ouml;schen wollen, so m&uuml;ssen Sie zuerst die Benutzer bearbeiten, die die fragliche Datenbank benutzen, und sie so &auml;ndern, dass sie eine andere Datenbank benutzen.',
-  'If you want to set up the authentication database yourself then log in to the administration panel. Lx-Office will then create the database and tables for you.' => 'Wenn Sie die Authentifizierungsdatenbank selber einrichten wollen, so melden Sie sich an der Administrationsoberfl&auml;che an. Lx-Office wird dann die Datenbank und die Tabellen f&uuml;r Sie anlegen.',
+  'If you want to set up the authentication database yourself then log in to the administration panel. kivitendo will then create the database and tables for you.' => 'Wenn Sie die Authentifizierungsdatenbank selber einrichten wollen, so melden Sie sich an der Administrationsoberfl&auml;che an. kivitendo wird dann die Datenbank und die Tabellen f&uuml;r Sie anlegen.',
   'If you yourself want to upgrade the installation then please read the file &quot;doc/UPGRADE&quot; and follow the steps outlined in this file.' => 'Wenn Sie selber die Aktualisierung bzw. Einrichtung &uuml;bernehmen wollen, so lesen Sie bitte die Datei &quot;doc/UPGRADE&quot; und folgen Sie den dort beschriebenen Schritten.',
   'Image'                       => 'Grafik',
   'Import'                      => 'Import',
@@ -936,9 +936,9 @@ $self->{texts} = {
   'Import profiles'             => 'Import-Profil',
   'Import result'               => 'Import-Ergebnis',
   'Import summary'              => 'Import-Zusammenfassung',
-  'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' => 'In Lx-Office 2.4.0 muss der Administrator in den Systemeinstellungen eine Liste von verwendbaren Einheiten angeben.',
   'In order to do that hit the button "Delete transaction".' => 'Drücken Sie dafür auf den Button "Buchung löschen".',
   'In the latter case the tables needed by Lx-Office will be created in that database.' => 'In letzterem Fall werden die von Lx-Office benötigten Tabellen in dieser existierenden Datenbank angelegt.',
+  'In version 2.4.0 the administrator has to enter a list of units in the administrative section.' => 'Vor Version 2.4.0 musste der Benutzer die Konten bei jeder Ware und jeder Dienstleistung einzeln ausw&auml;hlen.',
   'In-line'                     => 'im Text',
   'Inactive'                    => 'Inaktiv',
   'Include Exchangerate Difference' => 'Wechselkursunterschied einbeziehen',
@@ -1017,6 +1017,8 @@ $self->{texts} = {
   'KNE-Export erfolgreich!'     => 'KNE-Export erfolgreich!',
   'KNr. beim Kunden'            => 'KNr. beim Kunden',
   'Keine Suchergebnisse gefunden!' => 'Keine Suchergebnisse gefunden!',
+  'Kivitendo needs to update the authentication database before you can proceed.' => 'kivitendo muss die Authentifizierungsdatenbank aktualisieren, bevor Sie fortfahren können.',
+  'Kivitendo will then update the database automatically.' => 'kivitendo wird die Datenbank daraufhin automatisch aktualisieren.',
   'Konten'                      => 'Konten',
   'L'                           => 'L',
   'LIABILITIES'                 => 'PASSIVA',
@@ -1089,15 +1091,6 @@ $self->{texts} = {
   'Long Dates'                  => 'Lange Monatsnamen',
   'Long Description'            => 'Langtext',
   'Lx-Office'                   => 'Lx-Office',
-  'Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' => 'Lx-Office 2.4.0 f&uuml;hrt zwei neue Konzepte ein: Steuerzonen und Buchungsgruppen.',
-  'Lx-Office Homepage'          => 'Infos zu Lx-Office',
-  'Lx-Office can fix these problems automatically.' => 'Lx-Office kann solche Probleme automatisch beheben.',
-  'Lx-Office has been switched to group-based access restrictions.' => 'Lx-Office wurde auf eine gruppenbasierte Benutzerzugriffsverwaltung umgestellt.',
-  'Lx-Office has found one or more problems in the general ledger.' => 'Lx-Office hat ein oder mehrere Probleme im Hauptbuch gefunden.',
-  'Lx-Office is about to update the database [ #1 ].' => 'Lx-Office wird gleich die Datenbank [ #1 ] aktualisieren.',
-  'Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system.' => 'Lx-Office enth&auml;lt jetzt auch echte Lagerverwaultung anstatt reiner Mengenz&auml;hlung.',
-  'Lx-Office needs to update the authentication database before you can proceed.' => 'Lx-Office muss die Authentifizierungsdatenbank aktualisieren, bevor Sie fortfahren können.',
-  'Lx-Office will then update the database automatically.' => 'Lx-Office wird die Datenbank daraufhin automatisch aktualisieren.',
   'MAILED'                      => 'Gesendet',
   'MSG_BROWSER_DOES_NOT_SUPPORT_IFRAMES' => 'Ihr Browser kann leider keine eingebetteten Frames anzeigen. Bitte w&auml;hlen Sie ein anderes Men&uuml; in der Benutzerkonfiguration im Administrationsmen&uuml; aus.',
   'Main Preferences'            => 'Grundeinstellungen',
@@ -1263,7 +1256,7 @@ $self->{texts} = {
   'Oops. No valid action found to dispatch. Please report this case to the Lx-Office team.' => 'Ups. Es wurde keine gültige Funktion zum Aufrufen gefunden. Bitte berichten Sie diesen Fall den Lx-Office-Entwicklern.',
   'Open'                        => 'Offen',
   'Open Amount'                 => 'Offener Betrag',
-  'Open a further Lx-Office Window or Tab' => 'Neues Fenster bzw. Tab &ouml;ffnen',
+  'Open a further kivitendo Window or Tab' => '',
   'Open amount'                 => 'offener Betrag',
   'Open in new window'          => 'In neuem Fenster &ouml;ffnen.',
   'Open this Website'           => 'Homepage in neuem Fenster &ouml;ffnen',
@@ -1417,8 +1410,8 @@ $self->{texts} = {
   '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&auml;hlen.',
+  'Prior to version v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' => '',
+  'Prior to version v2.4.0 the user had to chose the accounts for each part and service.' => '',
   'Private E-mail'              => 'Private eMail',
   'Private Phone'               => 'Privates Tel.',
   'Problem'                     => 'Problem',
@@ -1666,7 +1659,7 @@ $self->{texts} = {
   'Start the correction assistant' => 'Korrekturassistenten starten',
   'Startdate_coa'               => 'Gültig ab',
   'Starting Balance'            => 'Eröffnungsbilanzwerte',
-  'Starting with Lx-Office 2.6.3 the configuration files in "config" have been consolidated.' => 'Mit Lx-Office 2.6.3 wurden die Konfigurationsdateien im Verzeichnis "config" vereinheitlicht.',
+  'Starting with version 2.6.3 the configuration files in "config" have been consolidated.' => '',
   'Statement'                   => 'Sammelrechnung',
   'Statement Balance'           => 'Sammelrechnungsbilanz',
   'Statement sent to'           => 'Sammelrechnung verschickt an',
@@ -1768,7 +1761,7 @@ $self->{texts} = {
   'The application "#1" was not found on the system.' => 'Die Anwendung "#1" wurde auf dem System nicht gefunden.',
   'The assembly has been created.' => 'Das Erzeugnis wurde hergestellt.',
   'The assistant could not find anything wrong with #1. Maybe the problem has been solved in the meantime.' => 'Der Korrekturassistent konnte kein Problem bei #1 feststellen. Eventuell wurde das Problem in der Zwischenzeit bereits behoben.',
-  'The authentication configuration file &quot;config/lx_office.conf&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' => 'Die Konfigurationsdatei f&uuml;r die Authentifizierung &quot;config/lx_office.conf&quot; wurde nicht gefunden. Diese Lx-Office-Installation wurde vermutlich noch nicht vollst&auml;ndig aktualisiert oder eingerichtet. Bitte wenden Sie sich an Ihren Administrator.',
+  'The authentication configuration file &quot;config/lx_office.conf&quot; does not exist. This kivitendo installation has probably not been updated correctly yet. Please contact your administrator.' => '',
   'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' => 'Die Authentifizierungsdatenbank kann momentan nicht erreicht werden. Entweder wurde sie noch nicht eingerichtet, oder der Datenbankserver antwortet nicht. Bitte wenden Sie sich an Ihren Administrator.',
   'The available options depend on the varibale type:' => 'Die verf&uuml;gbaren Optionen h&auml;ngen vom Variablentypen ab:',
   'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' => 'Die von Ihnen hochzuladende Sicherungsdatei muss mit dem Programm und den Parametern &quot;pg_dump -o -Ft&quot; erstellt worden sein.',
@@ -1791,7 +1784,7 @@ $self->{texts} = {
   'The custom variable has been deleted.' => 'Die benutzerdefinierte Variable wurde gel&ouml;scht.',
   'The custom variable has been saved.' => 'Die benutzerdefinierte Variable wurde gespeichert.',
   'The database #1 has been successfully deleted.' => 'Die Datenbank #1 wurde erfolgreich gelöscht.',
-  'The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:' => 'Die Datenbank zur Verwaltung der Benutzerdaten und zur Authentifizierung existiert nicht. Sie k&ouml;nnen Lx-Office diese Datenbank mit den folgenden Parametern anlegen lassen:',
+  'The database for user management and authentication does not exist. You can create let kivitendo create it with the following parameters:' => '',
   '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:',
   'The database upgrade for the introduction of Buchungsgruppen is now complete.' => 'Das Datenbankupgrade f&uuml;r die Einf&uuml;hrung von Buchungsgruppen ist jetzt beendet.',
   'The database upgrade for the introduction of units is now complete.' => 'Das Datenbankupgrade zwecks Einf&uuml;hrung von Einheiten ist nun beendet.',
@@ -1819,7 +1812,7 @@ $self->{texts} = {
   'The end date is the last day for which invoices will possibly be created.' => 'Das Enddatum ist das letztmögliche Datum, an dem eine Rechnung erzeugt wird.',
   'The factor is missing in row %d.' => 'Der Faktor fehlt in Zeile %d.',
   'The factor is missing.'      => 'Der Faktor fehlt.',
-  'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => 'Zum Einen gab es einen Bug in Lx-Office, der dazu führte, dass bei Buchungen mit verschiedenen Steuerschlüssel auf ein Konto teilweise falsche Steuerschlüssel gespeichert wurden.',
+  'The first reason is that kivitendo contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' => '',
   'The follow-up date is missing.' => 'Das Wiedervorlagedatum fehlt.',
   'The following Buchungsgruppen have already been created:' => 'Die folgenden Buchungsgruppen wurden bereits angelegt:',
   'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden',
@@ -1870,7 +1863,7 @@ $self->{texts} = {
   'The project has been saved.' => 'Das Projekt wurde gespeichert.',
   'The restoration process has started. Here\'s the output of the &quot;pg_restore&quot; command:' => 'Der Wiederherstellungsprozess wurde gestartet. Hier ist die Ausgabe des &quot;pg_restore&quot;-Programmes:',
   'The restoration process is complete. Please review &quot;pg_restore&quot;\'s output to find out if the restoration was successful.' => 'Die Wiederherstellung ist abgeschlossen. Bitte sehen Sie sich die Ausgabe von &quot;pg_restore&quot; an, um festzustellen, ob die Wiederherstellung erfolgreich war.',
-  'The second reason is that Lx-Office allowed the user to enter the tax amount manually regardless of the taxkey used.' => 'Zum Anderen war es möglich, die Steuern unabhängig vom ausgewählten Steuerschlüssel selber einzugeben.',
+  'The second reason is that kivitendo allowed the user to enter the tax amount manually regardless of the taxkey used.' => '',
   'The second way is to use Perl\'s CPAN module and let it download and install the module for you.' => 'Die zweite Variante besteht darin, Perls CPAN-Modul zu benutzen und es das Modul f&uuml;r Sie installieren zu lassen.',
   'The selected  PostgreSQL installation uses UTF-8 as its encoding. Therefore you have to configure Lx-Office to use UTF-8 as well.' => 'Die ausgewählte PostgreSQL-Installation benutzt UTF-8 als Zeichensatz. Deshalb müssen Sie Lx-Office so konfigurieren, dass es ebenfalls UTF-8 als Zeichensatz benutzt.',
   'The selected bank account does not exist anymore.' => 'Das ausgewählte Bankkonto existiert nicht mehr.',
@@ -1911,7 +1904,7 @@ $self->{texts} = {
   'There are still entries in the database for which no unit has been assigned.' => 'Es gibt noch Eintr&auml;ge in der Datenbank, f&uuml;r die keine Einheit zugeordnet ist.',
   'There are still transfers not matching the qty of the delivery order. Stock operations can not be changed later. Do you really want to proceed?' => 'Einige der Lagerbewegungen sind nicht vollständig und Lagerbewegungen können nachträglich nicht mehr verändert werden. Wollen Sie wirklich fortfahren?',
   'There are usually three ways to install Perl modules.' => 'Es gibt normalerweise drei Arten, ein Perlmodul zu installieren.',
-  'There is at least one sales or purchase invoice for which Lx-Office recorded an inventory transaction with taxkeys even though no tax was recorded.' => 'Es gibt mindestens eine Einkaufs- oder Verkaufsrechnung, für die Lx-Office einen Steuerschlüssel ungleich 0 verzeichnet hat, obwohl für Warenbestandsbuchugen bei Rechnungen nie Steuern gebucht werden.',
+  'There is at least one sales or purchase invoice for which kivitendo recorded an inventory transaction with taxkeys even though no tax was recorded.' => '',
   'There is at least one transaction for which the user has chosen a logically wrong taxkey.' => 'Es gibt mindestens eine Buchung, bei der ein logisch nicht passender Steuerschlüssel ausgewählt wurde.',
   'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, #5, for the transfer of #6.' => 'Von \'#1\' ist in Lager \'#2\', Lagerplatz \'#3\', #4, #5, nicht gen&uuml;gend eingelagert, um insgesamt #6 auszulagern.',
   'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, for the transfer of #5.' => 'Von \'#1\' ist in Lager \'#2\', Lagerplatz \'#3\', #4 nicht gen&uuml;gend eingelagert, um insgesamt #5 auszulagern.',
@@ -1919,9 +1912,9 @@ $self->{texts} = {
   'There is nothing to do in this step.' => 'In diesem Schritt gibt es nichts mehr zu tun.',
   'Therefore the definition of "kg" with the base unit "g" and a factor of 1000 is valid while defining "g" with a base unit of "kg" and a factor of "0.001" is not.' => 'So ist die Definition von "kg" mit der Basiseinheit "g" und dem Faktor 1000 zulässig, die Definition von "g" mit der Basiseinheit "kg" und dem Faktor "0,001" hingegen nicht.',
   'Therefore there\'s no need to create the same article more than once if it is sold or bought in/from another tax zone.' => 'Deswegen muss man den gleichen Artikel nicht mehr mehrmals anlegen, wenn er in verschiedenen Steuerzonen gehandelt werden soll.',
-  'These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.' => 'Diese Einheiten k&ouml;nnen auf anderen Einheiten basieren, sodass Lx-Office Preise umrechnen kann, wenn der Benutzer von einer Einheit zu einer anderen Wechselt.',
+  'These units can be based on other units so that kivitendo can convert prices when the user switches from one unit to another.' => '',
   'These wrong entries cannot be fixed automatically.' => 'Diese Einträge können nicht automatisch bereinigt werden.',
-  'This corresponds to Lx-Office\'s behavior prior to version 2.4.4.' => 'Dieses entspricht dem Verhalten von Lx-Office vor Version 2.4.4.',
+  'This corresponds to kivitendo\'s behavior prior to 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 group will be called &quot;Full Access&quot;.' => 'Diese Gruppe wird &quot;Vollzugriff&quot; genannt.',
@@ -2060,6 +2053,7 @@ $self->{texts} = {
   'Vendors'                     => 'Lieferanten',
   'Verrechnungseinheit'         => 'Verrechnungseinheit',
   'Version'                     => 'Version',
+  'Version 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' => '',
   'View SEPA export'            => 'SEPA-Export-Details ansehen',
   'View warehouse content'      => 'Lagerbestand ansehen',
   'View/edit all employees sales documents' => 'Bearbeiten/ansehen der Verkaufsdokumente aller Mitarbeiter',
@@ -2082,7 +2076,7 @@ $self->{texts} = {
   'Weight unit'                 => 'Gewichtseinheit',
   'What <b>term</b> you are looking for?' => 'Nach welchem <b>Begriff</b> wollen Sie suchen?',
   'What type of item is this?'  => 'Was ist dieser Artikel?',
-  'Which is located at doc/Lx-Office-Dokumentation.pdf. Click here: ' => 'Zu finden in doc/Lx-Office-Dokumentation.pdf. Oder hier klicken: ',
+  'Which is located at doc/Kivitendo-Dokumentation.pdf. Click here: ' => '',
   'With Extension Of Time'      => 'mit Dauerfristverlängerung',
   'Workflow Delivery Order'     => 'Workflow Lieferschein',
   'Workflow purchase_order'     => 'Workflow Lieferantenauftrag',
@@ -2110,7 +2104,7 @@ $self->{texts} = {
   'You can either create a new database or chose an existing database.' => 'Sie können entweder eine neue Datenbank erstellen oder eine existierende auswählen.',
   'You can find information on the migration in the upgrade chapter of the documentation.' => 'Informationen über die Migration sind in der Upgrade Kapitel in der Dokumentation zu finden.',
   'You can only delete datasets that are not in use.' => 'Sie k&ouml;nnen nur Datenbanken l&ouml;schen, die momentan nicht in Benutzung sind.',
-  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they\'re output.' => 'Sie k&ouml;nnen im Langtext und allen Übersetzungen die folgenden Variablen benutzen, die vor der Ausgabe von Lx-Office automatisch ersetzt werden:',
+  'You can use the following strings in the long description and all translations. They will be replaced by their actual values by kivitendo before they\'re output.' => '',
   'You cannot adjust the price for pricegroup "#1" by a negative percentage.' => 'Sie können den Preis für Preisgruppe "#1" um einen negativen Prozentwert anpassen.',
   'You cannot continue before all required modules are installed.' => 'Sie k&ouml;nnen nicht fortfahren, bevor alle ben&ouml;tigten Pakete installiert sind.',
   'You cannot continue until all unknown units have been mapped to known ones.' => 'Sie k&ouml;nnen nicht fortfahren, bis alle unbekannten Einheiten in neue Einheiten umgewandelt wurden.',
@@ -2126,7 +2120,7 @@ $self->{texts} = {
   '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&uuml;ssen eine Ma&szlig;- und eine Dienstleistungseinheit ausw&auml;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&uuml;ssen f&uuml;r jeden Artikel die neue Einheit ausw&auml;hlen.',
-  'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' => 'Sie m&uuml;ssen mindestens eine Benutzergruppe anlegen, ihr Zugriff auf die verschiedenen Funktionsbereiche von Lx-Office gew&auml;hren und Benutzer dieser Gruppe zuordnen.',
+  'You have to create at least one group, grant it access to kivitendo\'s functions and assign users to it.' => '',
   'You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.' => 'Sie m&uuml;ssen neue Buchungsgruppen f&uuml;r alle Kombinationen aus Inventar-, Erl&ouml;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").',
@@ -2218,6 +2212,13 @@ $self->{texts} = {
   'income'                      => 'Einnahmen-Überschuß-Rechnung',
   'invoice'                     => 'Rechnung',
   'invoice_list'                => 'debitorenbuchungsliste',
+  'kivitendo'                   => 'kivitendo',
+  'kivitendo Homepage'          => 'Infos zu kivitendo',
+  '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&auml;lt jetzt auch echte Lagerverwaultung anstatt reiner Mengenz&auml;hlung.',
   'lead deleted!'               => 'Kundenquelle gelöscht',
   'lead saved!'                 => 'Kundenquelle geichert',
   'list'                        => 'auflisten',
index c8cf075..ff8a56a 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+$debug = False;
+
 $api = php_sapi_name();
 if ( $api != "cli" ) {
     echo "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n</head>\n<body>\n";
@@ -21,22 +24,23 @@ if ( $api != "cli" ) {
 
 include_once("conf$shopnr.php");
 include_once("error.php");
+//Fehlerinstanz
+$err = new error($api);
+
 include_once("dblib.php");
 include_once("pepper.php");
 include_once("erplib.php");
 include_once("Picture.php");
 
-//Fehlerinstanz
-$err = new error($api);
 
 //Bilder
 $pict = new picture($ERPftphost,$ERPftpuser,$ERPftppwd,$ERPimgdir,$SHOPftphost,$SHOPftpuser,$SHOPftppwd,$SHOPimgdir,$err);
 //$pict->original = false;
 
 //ERP-Instanz
-$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err);
+$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err,$debug);
 if ($erpdb->db->connected_database_name == $ERPdbname) {
-    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager);
+    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager,$pricegroup,$ERPusrID);
 } else {
     $err->out('Keine Verbindung zur ERP',true);
     exit();
index c8e1dd2..d7b4d1e 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+$debug = False;
+
 $api = php_sapi_name();
 if ( $api != "cli" ) {
     echo "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n</head>\n<body>\n";
@@ -21,25 +24,26 @@ if ( $api != "cli" ) {
 
 include_once("conf$shopnr.php");
 include_once("error.php");
+//Fehlerinstanz
+$err = new error($api);
+
 include_once("dblib.php");
 include_once("pepper.php");
 include_once("erplib.php");
 
-//Fehlerinstanz
-$err = new error($api);
 
 
 //ERP-Instanz
-$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err);
+$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err,$debug);
 if ($erpdb->db->connected_database_name == $ERPdbname) {
-    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager);
+    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager,$pricegroup,$ERPusrID);
 } else {
     $err->out('Keine Verbindung zur ERP',true);
     exit();
 }
 
 //Shop-Instanz
-$shopdb = new mydb($SHOPhost,$SHOPdbname,$SHOPuser,$SHOPpass,$SHOPport,'mysql',$err);
+$shopdb = new mydb($SHOPhost,$SHOPdbname,$SHOPuser,$SHOPpass,$SHOPport,'mysql',$err,$debug);
 if ($shopdb->db->connected_database_name == $SHOPdbname) {
      $shop = new pepper($shopdb,$err,$SHOPdbname,$divStd,$divVerm,$minder,$nachn,$versandS,$versandV,$paypal,$treuhand,$mwstLX,$mwstS,$variantnr);
 } else {
index 4d59667..b0e1d74 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+$debug = False;
+
 $api = php_sapi_name();
 if ( $api != "cli" ) {
     echo "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n</head>\n<body>\n";
@@ -21,18 +24,19 @@ if ( $api != "cli" ) {
 
 include_once("conf$shopnr.php");
 include_once("error.php");
+//Fehlerinstanz
+$err = new error();
+
 include_once("dblib.php");
 include_once("pepper.php");
 include_once("erplib.php");
-//Fehlerinstanz
-$err = new error();
 
 $err->out("Shop $shopnr, Bestellimport",true);
 
 //ERP-Instanz
-$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err);
+$erpdb = new mydb($ERPhost,$ERPdbname,$ERPuser,$ERPpass,$ERPport,'pgsql',$err,$debug);
 if ($erpdb->db->connected_database_name == $ERPdbname) {
-    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager);
+    $erp = new erp($erpdb,$err,$divStd,$divVerm,$auftrnr,$kdnum,$preA,$preK,$invbrne,$mwstS,$OEinsPart,$lager,$pricegroup,$ERPusrID);
 } else {
     $err->out('Keine Verbindung zur ERP',true);
     exit();
index 6420749..c0797b6 100644 (file)
@@ -8,8 +8,9 @@ class mydb {
    var $error = false;
    var $debug = true;
    var $dbf = false;
+   var $database = false;
 
-   function mydb($host,$db,$user,$pass,$port,$proto,$error) {
+   function mydb($host,$db,$user,$pass,$port,$proto,$error,$debug) {
        $this->error = $error;
        $dsn = array('phptype'  => $proto,
                'username' => $user,
@@ -17,25 +18,18 @@ class mydb {
                'hostspec' => $host,
                'database' => $db,
                'port'     => $port);
-       if ( $this->debug ) {
-            $this->dbf = fopen ("tmp/shop.log","w");
-            if ( !$this->dbf ) $this->debug = false;
-       }
+       $this->debug = $debug;
+       $this->database = "-< $db >-";
        $this->connect($dsn);
     }
 
-    function log($txt) {
-       $now = date('Y-m-d H:i:s');
-       fputs($this->dbf,$now." : ".$txt."\n");
-    }
     function connect($dsn) {
        $options = array('result_buffering' => false,);
        $this->db = MDB2::connect($dsn,$options);
-       if ( $this->debug ) $this->log('Connect:');
+       if ( $this->debug ) $this->error->write('dblib->connect '.$this->database,'Connect:');
        if (PEAR::isError($this->db)) {
-           if ( $this->debug ) $this->log($this->db->getMessage());
-           $this->error->write('dblib->connect',$this->db->getMessage());
-           $this->error->write('dblib->connect',print_r($dsn,true));
+           $this->error->write('dblib->connect '.$this->database,$this->db->getMessage());
+           $this->error->write('dblib->connect '.$this->database,print_r($dsn,true));
            $this->db = false;
            return false;
        }
@@ -53,10 +47,9 @@ class mydb {
 
     function getAll($sql) {
         $rs = $this->db->queryAll($sql);
-        if ( $this->debug ) $this->log($sql);
+        if ( $this->debug ) $this->error->write('dblib->getAll '.$this->database,$sql);
         if (PEAR::isError($rs)) {
-            if ( $this->debug ) $this->log($rs->getUserinfo());
-            $this->error->write('dblib->getAll',$rs->getUserinfo());
+            $this->error->write('dblib->getAll '.$this->database,$rs->getUserinfo());
             return false;
         }
         return $rs;
@@ -64,38 +57,35 @@ class mydb {
  
     function getOne($sql) {
         $rs = $this->db->queryRow($sql);
-        if ( $this->debug ) $this->log($sql);
+        if ( $this->debug ) $this->error->write('dblib->getOne '.$this->database,$sql);
         if (PEAR::isError($rs)) {
-            if ( $this->debug ) $this->log($rs->getUserinfo());
-            $this->error->write('dblib->getOne',$rs->getUserinfo());
+            $this->error->write('dblib->getOne '.$this->database,$rs->getUserinfo());
             return false;
         }
         return $rs;
     }
     function query($sql) {
         $rc = $this->db->query($sql);
-        if ( $this->debug ) $this->log($sql);
+        if ( $this->debug ) $this->error->write('dblib->query '.$this->database,$sql);
         if (PEAR::isError($rc)) {
-            if ( $this->debug ) $this->log($rc->getUserinfo());
-            $this->error->write('dblib->query',$rc->getUserinfo());
+            $this->error->write('dblib->query '.$this->database,$rc->getUserinfo());
             return false;
         }
         return $rc;
     } 
     function insert($statement,$data) {
-        if ( $this->debug ) $this->log("INSERT ".$statement);
+        if ( $this->debug ) $this->error->write("dblib->insert ".$this->database,$statement);
         $sth = $this->db->prepare($statement);                      //Prepare
         if (PEAR::isError($sth)) {
-            $this->error->write('dblib->insert 1',$sth->getMessage());
+            $this->error->write('dblib->insert 1 '.$this->database,$sth->getMessage());
             $this->error->write('dblib->insert 2',$sth->getUserinfo());
             $this->rollback();
             return false;
         }
-        if ( $this->debug ) $this->log(print_r($data,true));
+        if ( $this->debug ) $this->error->write('dblib->insert',print_r($data,true));
         $rc =& $sth->execute($data);
         if (PEAR::isError($rc)) {
-            if ( $this->debug ) $this->log($rc->getUserinfo());
-            $this->error->write('dblib->insert 3',$rc->getUserinfo());
+            $this->error->write('dblib->insert 3 '.$this->database,$rc->getUserinfo());
             return false;
         }//else{
         //    $rc = $this->commit();
@@ -103,20 +93,18 @@ class mydb {
         return $rc;
     }
     function update($statement,$data) {  
-        if ( $this->debug ) $this->log("UPDATE ".$statement);
+        if ( $this->debug ) $this->error->write("dblib->update ".$this->database,$statement);
         $sth = $this->db->prepare($statement);                      //Prepare
         if (PEAR::isError($sth)) {
-            if ( $this->debug ) $this->log("ERRPOR ".$rc->getUserinfo());
-            $this->error->write('dblib->update 1',$sth->getMessage());
+            $this->error->write('dblib->update 1 '.$this->database,$sth->getMessage());
             $this->error->write('dblib->update 2',$sth->getUserinfo());
             $this->rollback();
             return false;
         }
-        if ( $this->debug ) $this->log(print_r($data,true));
+        if ( $this->debug ) $this->error->write('dblib->insert',print_r($data,true));
         $rc =& $sth->execute($data);
         if (PEAR::isError($rc)) {
-            if ( $this->debug ) $this->log("ERRPOR ".$rc->getUserinfo());
-            $this->error->write('dblib->update 3',$rc->getUserinfo());
+            $this->error->write('dblib->update 3 '.$this->database,$rc->getUserinfo());
             return false;
         }//else{
         //    $rc = $this->commit();
@@ -130,14 +118,14 @@ class mydb {
         }
         $sth = $this->db->prepare($statement);                      //Prepare
         if (PEAR::isError($sth)) {
-            $this->error->write('dblib->insertMultiple',$sth->getMessage());
+            $this->error->write('dblib->insertMultiple '.$this->database,$sth->getMessage());
             $this->rollback();
             return false;
         }
         $rc =& $this->db->beginTransaction();
         $rc =& $this->db->extended->executeMultiple($sth, $data);
         if (PEAR::isError($rc)) {
-            $this->error->write('dblib->insertMultiple',$rc->getUserinfo());
+            $this->error->write('dblib->insertMultiple '.$this->database,$rc->getUserinfo());
             $this->rollback();
             return false;
         }else{
index edbe754..00be5c1 100644 (file)
@@ -13,6 +13,7 @@ class erp {
 
     var $db = false;
     var $error = false;
+    var $pricegroup = 0;
     var $TAX = false;
     var $mkPart = true;
     var $divStd = false;
@@ -20,14 +21,18 @@ class erp {
     var $doordnr = false;
     var $docustnr = false;
     var $lager = 1;
+    var $warehouse_id = 0;
+    var $transtype = 0;
     var $preordnr = '';
     var $precustnr = '';
     var $OEinsPart = false;
     var $INVnetto = true; //Rechnungen mit Nettopreisen
     var $SHOPincl = true; //Shoppreise sind Brutto
 
-    function erp($db,$error,$divStd,$divVerm,$doordnr,$docustnr,$preordnr,$precustnr,$INVnetto,$SHOPincl,$OEinsPart,$lager) {
+    function erp($db,$error,$divStd,$divVerm,$doordnr,$docustnr,$preordnr,$precustnr,$INVnetto,$SHOPincl,$OEinsPart,$lager,$pricegroup,$ERPusrID) {
         $this->db = $db;
+        $this->pricegroup = $pricegroup;
+        $this->employee_id = $ERPusrID;
         $this->error = $error;
         $this->divStd  = $divStd;
         $this->divVerm = $divVerm;
@@ -40,6 +45,18 @@ class erp {
         $this->OEinsPart = ($OEinsPart == 1)?true:false;
         $this->lager = ($lager)?$lager:1;
         $this->getTax();
+        if ( $lager > 1 ) {
+            $sql  = "SELECT warehouse_id from bin where id = ".$this->lager;
+            $rs = $this->db->getOne($sql);
+            if ( $rs['warehouse_id'] > 0 ) {
+               $this->warehouse_id = $rs['warehouse_id'];
+                $sql = "SELECT id from transfer_type WHERE direction = 'in' and description = 'stock'";
+                $rs = $this->db->getOne($sql);
+                $this->transtype = $rs['id'];
+            } else {
+                $this->lager = 1;
+            }
+        }
     }
 
     function getTax() {
@@ -369,6 +386,7 @@ class erp {
        $data = array(partnumber,description,longdescription,weight,sellprice,taxrate,partsgroup,unit)
        Rückgabe parts.id
        */
+       $link = '<a href="../ic.pl?action=edit&id=%d" target="_blank">';
        if ($data['partnumber'] == '') {
            $this->error->write('erplib','Artikelnummer fehlt');
            return false;
@@ -408,10 +426,35 @@ class erp {
        $sql .= "VALUES (:partnumber,:description,:sellprice,:weight,:notes,:shop,:unit,:partsgroup_id,";
        $sql .= ":image,:buchungsgruppen_id,1,1,1)";
        $rc = $this->db->insert($sql,$data);
+       $data['parts_id'] = $this->chkPartnumber($data,false);
+       if ( $this->pricegroup > 0 ) {
+            $sql  = "INSERT INTO prices (parts_id,pricegroup_id,price) VALUES (:parts_id,:pricegroup,:shoppreis)";
+            $data['pricegroup'] = $this->pricegroup;
+            $rc = $this->db->insert($sql,$data);
+       };
+       if ( $data['onhand'] > 0 and $this->lager > 1) $this->insLager($data);
        $x =  $this->chkPartnumber($data,False);
-       $this->error->out('Neuer Artikel: '.$data['partnumber'],true);
-       $this->error->write('erplib','Artikel neu: '.$data['partnumber']);
+       $this->error->write('erplib',$data['description'].' '.$data['partnumber']);
+       $this->error->out(sprintf($link,$data['parts_id']).$data['description'].' '.$data['partnumber'].'</a>',true);
        return $x;
     }
+    function insLager($data) {
+        $rc = $this->db->Begin();
+        $sql = "SELECT nextval(('id'::text)::regclass) as id from id";
+        $rs = $this->db->getOne($sql);
+        $sql  = "INSERT INTO inventory (warehouse_id,parts_id,shippingdate,employee_id,bin_id,qty,trans_id,trans_type_id,comment) ";
+        $sql .= "VALUES (:wid,:parts_id,now(),:employee_id,:bid,:onhand,:next,:tt,'Shopübernahme')";
+        $data['next'] = $rs['id'];
+        $data['tt'] = $this->transtype;
+        $data['bid'] = $this->lager;
+        $data['wid'] = $this->warehouse_id;
+        $data['employee_id'] = $this->employee_id;
+        $rc = $this->db->insert($sql,$data);
+        if ( $rc ) {
+           $this->db->Commit();
+        } else {
+           $this->db->Rollback();
+        }
+    }
 }
 ?>
index c1faf8a..25a9d79 100644 (file)
@@ -35,8 +35,8 @@ class pepper {
                             "waehrung"=>"currency","beschreibung"=>"notes",
                             "mwst"=>"mwst","versandart"=>"shipvia");
     var $orderparts = array("artikelname"=>"description","name"=>"description","preis"=>"sellprice","anzahl"=>"qty","artikel_nr"=>"partnumber",
-                            "partsgroup"=>"partsgroup","beschreibung"=>"longdescription","gewicht"=>"weight",
-                            "mwst_satz"=>"taxrate","bild_gross"=>"image","anzahl_einheit"=>"unit");
+                            "partsgroup"=>"partsgroup","beschreibung"=>"longdescription","gewicht"=>"weight","shoppreis"=>"shoppreis",
+                            "mwst_satz"=>"taxrate","bild_gross"=>"image","anzahl_einheit"=>"unit","lagerbestand"=>"onhand");
     var $pic = false;
 
     function pepper($db,$error,$dbname,
@@ -418,6 +418,7 @@ class pepper {
             $row['partsgroup'] = $this->_toERP($this->Kategorien[$row['katid']]);
             $row['name'] = $this->_toERP($row['name']);
             $row['beschreibung'] = $this->_toERP($row['beschreibung']);
+            $row['shoppreis'] = $row['preis'];
             if (!$this->mwstLX) $row['preis'] = round(($row['preis'] / (100 + $row['mwst_satz']) * 100),$this->dezimal);
             $data[] = $this->translateTable($row,"orderparts");
         }
index 867bbad..1d81d0f 100644 (file)
@@ -4,7 +4,7 @@
  <p><div class="listheading">[% title %]</div></p>
 
  <p>
-  [% 'Earlier versions of Lx-Office contained bugs which might have led to wrong entries in the general ledger.' | $T8 %]
+  [% 'Earlier versions of kivitendo contained bugs which might have led to wrong entries in the general ledger.' | $T8 %]
   [% 'These wrong entries cannot be fixed automatically.' | $T8 %]
   [% 'This module can help you identify and correct such entries by analyzing the general ledger and presenting you likely solutions but also allowing you to fix problems yourself.' | $T8 %]
  </p>
index 883c4e7..f75b1b7 100644 (file)
@@ -4,7 +4,7 @@
 
  <p><div class="listtop">[% title %]</div></p>
 
- <p>[% 'Lx-Office has found one or more problems in the general ledger.' | $T8 %]</p>
+ <p>[% 'kivitendo has found one or more problems in the general ledger.' | $T8 %]</p>
 
  <p>
   [% 'Period' | $T8 %]:
index 6115d92..1041b12 100644 (file)
@@ -11,7 +11,7 @@
  </p>
 
  <p>
-  [% 'Lx-Office can fix these problems automatically.' | $T8 %]
+  [% 'kivitendo can fix these problems automatically.' | $T8 %]
 
   [% 'For AP transactions it will replace the sales taxkeys with input taxkeys with the same tax rate.' | $T8 %]
 
index a0fa658..35ecb01 100644 (file)
@@ -5,11 +5,11 @@
  <p><div class="listtop">[% title %]</div></p>
 
  <p>
-  [% 'There is at least one sales or purchase invoice for which Lx-Office recorded an inventory transaction with taxkeys even though no tax was recorded.' | $T8 %]
+  [% 'There is at least one sales or purchase invoice for which kivitendo recorded an inventory transaction with taxkeys even though no tax was recorded.' | $T8 %]
  </p>
 
  <p>
-  [% 'Lx-Office can fix these problems automatically.' | $T8 %]
+  [% 'kivitendo can fix these problems automatically.' | $T8 %]
 
   [% 'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' | $T8 %]
  </p>
index 430f0fc..db56f82 100644 (file)
@@ -21,9 +21,9 @@
  <p>
   [% 'This could have happened for two reasons:' | $T8 %]
 
-  [% 'The first reason is that Lx-Office contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' | $T8 %]
+  [% 'The first reason is that kivitendo contained a bug which resulted in the wrong taxkeys being recorded for transactions in which two entries are posted for the same chart with different taxkeys.' | $T8 %]
 
-  [% 'The second reason is that Lx-Office allowed the user to enter the tax amount manually regardless of the taxkey used.' | $T8 %]
+  [% 'The second reason is that kivitendo allowed the user to enter the tax amount manually regardless of the taxkey used.' | $T8 %]
 
   [% 'Such entries cannot be exported into the DATEV format and have to be fixed as well.' | $T8 %]
  </p>
index a059c84..22e07fc 100644 (file)
@@ -4,9 +4,9 @@
 <body class="admin" onload="document.getElementById('rpw').focus()">
  <div align="center">
 
-  <a href="http://www.lx-office.org"><img src="image/lx-office-erp.png" border="0"></a>
+  <a href="http://www.kivitendo.org"><img src="image/kivitendo.png" border="0"></a>
 
-  <h3 class="login">[% 'Lx-Office' | $T8 %] [% HTML.escape(version) %]</h3>
+  <h3 class="login">[% 'kivitendo' | $T8 %] [% HTML.escape(version) %]</h3>
 
   <h2>[% 'Administration' | $T8 %]</h2>
 
@@ -27,7 +27,7 @@
 
   </form>
 
-  <p>[% 'Lx-Office Homepage' | $T8 %]: <a href="http://lx-office.org" target="_blank" title="[% 'Lx-Office Homepage' | $T8 %]">http://lx-office.org</a></p>
+  <p>[% 'kivitendo Homepage' | $T8 %]: <a href="http://kivitendo.de" target="_blank" title="[% 'kivitendo Homepage' | $T8 %]">http://kivitendo.de</a></p>
 
   <p><a href="login.pl" target="_top">[%- LxERP.t8('Back to the login page') %]</a></p>
 
index 4c55413..7005759 100644 (file)
@@ -6,7 +6,7 @@
  <form method="post" action="admin.pl">
 
   <p>
-   [% 'The database for user management and authentication does not exist. You can create let Lx-Office create it with the following parameters:' | $T8 %]
+   [% 'The database for user management and authentication does not exist. You can create let kivitendo create it with the following parameters:' | $T8 %]
   </p>
 
   <table border="0">
index d5f680f..00f0489 100644 (file)
@@ -7,9 +7,9 @@
 
   <p>
 
-   [% 'Lx-Office has been switched to group-based access restrictions.' | $T8 %]
+   [% 'kivitendo has been switched to group-based access restrictions.' | $T8 %]
 
-   [%- 'You have to create at least one group, grant it access to Lx-Office\'s functions and assign users to it.' | $T8 %]
+   [%- 'You have to create at least one group, grant it access to kivitendo\'s functions and assign users to it.' | $T8 %]
 
    [% 'Otherwise all users will only have access to their own settings.' | $T8 %]
 
@@ -17,9 +17,9 @@
 
   <p>
 
-   [%- 'During this user migration Lx-Office can create such a group for you and grant all users access to all of Lx-Office\'s functions.' | $T8 %]
+   [%- 'During this user migration kivitendo can create such a group for you and grant all users access to all of kivitendo\'s functions.' | $T8 %]
 
-   [%- 'This corresponds to Lx-Office\'s behavior prior to version 2.4.4.' | $T8 %]
+   [%- 'This corresponds to kivitendo\'s behavior prior to version 2.4.4.' | $T8 %]
 
   </p>
 
@@ -31,7 +31,7 @@
 
   <p>
 
-   [% 'Do you want Lx-Office to create a group for access to all functions?' | $T8 %]
+   [% 'Do you want kivitendo to create a group for access to all functions?' | $T8 %]
 
    [% 'This group will be called &quot;Full Access&quot;.' | $T8 %]
 
index ab7a94b..2817315 100644 (file)
@@ -20,7 +20,7 @@
   <p>
    [%- 'The backup you upload here has to be a file created with &quot;pg_dump -o -Ft&quot;.' | $T8 %]
    [%- 'It may optionally be compressed with &quot;gzip&quot;.' | $T8 %]
-   [%- 'Files created by Lx-Office\'s &quot;Backup Dataset&quot; function are such files.' | $T8 %]
+   [%- 'Files created by kivitendo\'s &quot;Backup Dataset&quot; function are such files.' | $T8 %]
   </p>
 
   <table>
index 5d2fb74..d48cc61 100644 (file)
@@ -41,7 +41,7 @@
                 <input type="button" value="[% 'Details (one letter abbreviation)' | $T8 %]" onclick="show_vc_details('customer')"></td>
                 [% L.hidden_tag('selectcustomer', selectcustomer) %]
                 [% L.hidden_tag('oldcustomer', oldcustomer) %]
-                [% L.hidden_tag('oldcustomer', oldcustomer) %]
+                [% L.hidden_tag('customer_id', customer_id) %]
                 [% L.hidden_tag('terms', terms) %]
               </tr>
               <tr>
index 814ccb0..8f71e65 100644 (file)
       [% ELSE %][% 'Homepage' | $T8 %]
       [% END %]
       </th>
-      <td><input name="homepage" size="45" title="[% 'Example: http://lx-office.org' | $T8 %]" value="[% HTML.escape(homepage) %]"></td>
+      <td><input name="homepage" size="45" title="[% 'Example: http://kivitendo.de' | $T8 %]" value="[% HTML.escape(homepage) %]"></td>
      </tr>
 
      <tr>
index 98e963e..95ecd3d 100644 (file)
@@ -5,18 +5,18 @@
 </p>
 
 <p>
Lx-Office speichert Buchungsdaten als aggregierte Nettowerte.
kivitendo speichert Buchungsdaten als aggregierte Nettowerte.
 
  Das DATEV-Dateiformat hingegen erwartet aufgeteilte Buchungssätze mit
  Bruttowerten.
 
  Es ist deshalb technisch nicht immer möglich, aus den vorhandenen
  aggregierten Nettowerten solche Bruttowerte zu errechnen, sodass für
- einen Beleg betrachtet die von Lx-Office angezeigten und die in den
+ einen Beleg betrachtet die von kivitendo angezeigten und die in den
  DATEV-Export geschriebenen Bruttowerte exakt übereinstimmen.
 
  Abweichungen im Cent-Bereich sind in beide Richtungen möglich (Brutto
Lx-Office ist größer als Brutto DATEV und umgekehrt), werden aber von
kivitendo ist größer als Brutto DATEV und umgekehrt), werden aber von
  den Steuerbehörden anstandslos akzeptiert.
 </p>
 
index 5e962c9..239baae 100644 (file)
@@ -4,8 +4,8 @@
 <div class="listtop">[% 'Introduction of Buchungsgruppen' | $T8 %]</div>
 
 <p>
- [%- 'Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.' | $T8 %]
- [%- 'Lx-Office 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' | $T8 %]
+ [%- 'Prior to version v2.4.0 the user had to chose the accounts for each part and service.' | $T8 %]
+ [%- 'Version 2.4.0 introduces two new concepts: tax zones and Buchungsgruppen.' | $T8 %]
  [%- 'There are four tax zones.' | $T8 %]
  [%- '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.' | $T8 %]
  [%- 'Now the user must select a single Buchungsgruppe for each part instead of three distinct accounts.' | $T8 %]
index ef977a1..db07f7a 100644 (file)
@@ -4,9 +4,9 @@
 <div class="listtop">[% 'Introduction of units' | $T8 %]</div>
 
 <p>
- [% 'Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' | $T8 %]
- [% 'In Lx-Office 2.4.0 the administrator has to enter a list of units in the administrative section.' | $T8 %]
- [% 'These units can be based on other units so that Lx-Office can convert prices when the user switches from one unit to another.' | $T8 %]
+ [% 'Prior to version v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' | $T8 %]
+ [% 'In version 2.4.0 the administrator has to enter a list of units in the administrative section.' | $T8 %]
+ [% 'These units can be based on other units so that kivitendo can convert prices when the user switches from one unit to another.' | $T8 %]
 </p>
 
 <p>
index 5edff88..e56daab 100644 (file)
@@ -4,7 +4,7 @@
 
 <form action="[% script %]" method="POST">
  <p>
-  [% 'Lx-Office is now able to manage warehouses instead of just tracking the amount of goods in your system.' | $T8 %]
+  [% 'kivitendo is now able to manage warehouses instead of just tracking the amount of goods in your system.' | $T8 %]
   [% 'This update will change the nature the onhand of goods is tracked.' | $T8 %]
   [% 'As a result, the saved onhand values of the present goods can be stored into a warehouse designated by you, or will be reset for a proper warehouse tracking' | $T8 %]
  </p>
index f54c687..9de5e9e 100644 (file)
@@ -6,7 +6,7 @@
  <input type="hidden" name="action" value="login">
  <p><input type="button" class="submit" onclick="history.back()" value="[% 'Back' | $T8 %]"></p>
  <p class="message_hint">
-  [% LxERP.t8('Lx-Office is about to update the database [ #1 ].', dbname) | html %]
+  [% LxERP.t8('kivitendo is about to update the database [ #1 ].', dbname) | html %]
  </p>
  <p>
   [% 'You should create a backup of the database before proceeding because the backup might not be reversible.' | $T8 %]
index 9a16f21..fb01cbf 100644 (file)
@@ -4,15 +4,15 @@
  <p><b>[% LxERP.t8('Error!') %]</b></p>
 
  <p>
-  [% LxERP.t8('Lx-Office needs to update the authentication database before you can proceed.') %]
+  [% LxERP.t8('Kivitendo needs to update the authentication database before you can proceed.') %]
   [% LxERP.t8('Please log in to the administration panel.') %]
-  [% LxERP.t8('Lx-Office will then update the database automatically.') %]
+  [% LxERP.t8('Kivitendo will then update the database automatically.') %]
  </p>
 
  <hr>
  <p>
-  [% LxERP.t8('For further information read this: ') %] <a href="doc/html/index.html" target="_blank">Lx-Office Installation</a><br>
-  [% LxERP.t8('Or download the whole Installation Documentation as PDF (350kB) for off-line study (currently in German Language): ') %] <a href="doc/Lx-Office-Dokumentation.pdf" target="_blank">Lx-Office-Dokumentation.pdf</a>
+  [% LxERP.t8('For further information read this: ') %] <a href="doc/html/index.html" target="_blank">Kivitendo Installation</a><br>
+  [% LxERP.t8('Or download the whole Installation Documentation as PDF (350kB) for off-line study (currently in German Language): ') %] <a href="doc/Kivitendo-Dokumentation.pdf" target="_blank">Kivitendo-Dokumentation.pdf</a>
  </p>
 
  <hr>
index 092fe95..5ca592b 100644 (file)
@@ -5,10 +5,10 @@
 
  <p>[%- 'The authentication database is not reachable at the moment. Either it hasn\'t been set up yet or the database server might be down. Please contact your administrator.' | $T8 %]</p>
 
- <p>[% 'If you want to set up the authentication database yourself then log in to the administration panel. Lx-Office will then create the database and tables for you.' | $T8 %]</p>
+ <p>[% 'If you want to set up the authentication database yourself then log in to the administration panel. kivitendo will then create the database and tables for you.' | $T8 %]</p>
  <hr>
- <p>[% 'For further information read this: ' | $T8 %] <a href="doc/html/index.html" target="_blank">Lx-Office Installation</a><br>
- [% 'Or download the whole Installation Documentation as PDF (350kB) for off-line study (currently in German Language): ' | $T8 %] <a href="doc/Lx-Office-Dokumentation.pdf" target="_blank"> Lx-Office-Dokumentation.pdf</a></p>
+ <p>[% 'For further information read this: ' | $T8 %] <a href="doc/html/index.html" target="_blank">kivitendo Installation</a><br>
+ [% 'Or download the whole Installation Documentation as PDF (350kB) for off-line study (currently in German Language): ' | $T8 %] <a href="doc/Kivitendo-Dokumentation.pdf" target="_blank">Kivitendo-Dokumentation.pdf</a></p>
 
  <hr>
 
index 0f65e36..8f158cf 100644 (file)
@@ -3,7 +3,7 @@
 
  <p><b>[% 'Error!' | $T8 %]</b></p>
 
- <p>[% 'The authentication configuration file &quot;config/lx_office.conf&quot; does not exist. This Lx-Office installation has probably not been updated correctly yet. Please contact your administrator.' | $T8 %]</p>
+ <p>[% 'The authentication configuration file &quot;config/lx_office.conf&quot; does not exist. This kivitendo installation has probably not been updated correctly yet. Please contact your administrator.' | $T8 %]</p>
 
  <p>[% 'If you yourself want to upgrade the installation then please read the file &quot;doc/UPGRADE&quot; and follow the steps outlined in this file.' | $T8 %]</p>
 
index 10adcc0..0105c98 100644 (file)
@@ -4,13 +4,13 @@
    <noscript>
    [% INCLUDE 'generic/information.html'
      title_information = LxERP.t8('Your browser does not currently support Javascript.'),
-     label_information = LxERP.t8('A lot of the usability of Lx-Office has been enhanced with javascript. Although it is currently possible to use every aspect of Lx-Office without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.'),
+     label_information = LxERP.t8('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.'),
    %]
    </noscript>
  <center>
-  <a class="nomobile" href="http://www.lx-office.org" target="_top"><img src="image/lx-office-erp.png" border="0" title="[% 'Lx-Office Homepage' | $T8 %]"></a>
+  <a class="nomobile" href="http://www.kivitendo.de" target="_top"><img src="image/kivitendo.png" border="0" title="[% 'kivitendo Homepage' | $T8 %]"></a>
 
-  <h3 class="login">[% 'Lx-Office' | $T8 %] [% version %]</h3>
+  <h3 class="login">[% 'kivitendo' | $T8 %] [% version %]</h3>
 
   <p>[% 'companylogo_subtitle' | $T8 %]</p>
   <p>
@@ -45,8 +45,8 @@
      <td>[% HTML.escape(interface) %]</td>
     </tr>
     <tr class="nomobile">
-     <th align="left">[% 'Lx-Office Homepage' | $T8 %]:</th>
-     <td><a href="http://lx-office.org" target="_blank" title="[% 'Lx-Office Homepage' | $T8 %]">http://lx-office.org</a></td>
+     <th align="left">[% 'kivitendo Homepage' | $T8 %]:</th>
+     <td><a href="http://kivitendo.de" target="_blank" title="[% 'kivitendo Homepage' | $T8 %]">http://kivitendo.de</a></td>
     </tr>
    </table>
  </center>
index 8bfd218..e0bdb87 100644 (file)
@@ -5,8 +5,8 @@
   <table class="login" border="3" cellpadding="20">
    <tr>
     <td class="login" align="center">
-     <a href="http://www.lx-office.org" target="_top"><img src="image/lx-office-erp.png" border="0"></a>
-     <h3 class="login" align="center">[% 'Lx-Office' | $T8 %] [% version %]</h3>
+     <a href="http://www.kivitendo.de" target="_top"><img src="image/kivitendo.png" border="0"></a>
+     <h3 class="login" align="center">[% 'kivitendo' | $T8 %] [% version %]</h3>
 
      [% IF error_message %]
      <p><span class="message_error_login">[% error_message %]</span></p>
index 7bd7f61..a7f80a4 100644 (file)
@@ -3,7 +3,7 @@
  <div class="listtop">[% title %]</div>
 
  <p>
-  [%- LxERP.t8('Starting with Lx-Office 2.6.3 the configuration files in "config" have been consolidated.') %]
+  [%- LxERP.t8('Starting with version 2.6.3 the configuration files in "config" have been consolidated.') %]
   [%- LxERP.t8('The following old files whose settings have to be merged manually into the new configuration file "config/lx_office.conf" still exist:') %]
  </p>
 
@@ -14,7 +14,7 @@
  </ul>
 
  <p>
-  [%- LxERP.t8('Due to security concerns these files have to be deleted or moved after the migration before you can continue using Lx-Office.') %]
+  [%- LxERP.t8('Due to security concerns these files have to be deleted or moved after the migration before you can continue using kivitendo.') %]
  </p>
 
  <p>
@@ -22,7 +22,7 @@
  </p>
   <p>
 
-  [%- LxERP.t8('Which is located at doc/Lx-Office-Dokumentation.pdf. Click here: ') %] <a href ="doc/Lx-Office-Dokumentation.pdf">doc/Lx-Office-Dokumentation.pdf</a>
+  [%- LxERP.t8('Which is located at doc/Kivitendo-Dokumentation.pdf. Click here: ') %] <a href ="doc/Kivitendo-Dokumentation.pdf">doc/Kivitendo-Dokumentation.pdf</a>
 </p>
 
  <p>
index f0da916..1fb3c5e 100644 (file)
@@ -4,7 +4,7 @@
 [% UNLESS is_links %]
  <span class="frame-header-element frame-header-left">
     [<a href="JavaScript:Switch_Menu();" title="[% 'Switch Menu on / off' | $T8 %]">[% 'Menu' | $T8 %]</a>]
-    [<a HREF="login.pl" target="_blank" title="[% 'Open a further Lx-Office Window or Tab' | $T8 %]">[% 'New Win/Tab' | $T8 %]</a>]
+    [<a HREF="login.pl" target="_blank" title="[% 'Open a further kivitendo Window or Tab' | $T8 %]">[% 'New Win/Tab' | $T8 %]</a>]
     [<a href="JavaScript:top.main_window.print();" title="[% 'Hardcopy' | $T8 %]">[% 'Print' | $T8 %]</a>]
     [<a href="Javascript:top.main_window.history.back();" title="[% 'Go one step back' | $T8 %]">[% 'Back' | $T8 %]</a>]
     [<a href="Javascript:top.main_window.history.forward();" title="[% 'Go one step forward' | $T8 %]">[% 'Fwd' | $T8 %]</a>]
index ed67b02..2c5d801 100644 (file)
@@ -6,7 +6,6 @@
 
   <form method="post" name="oe" action="[% script %]">
 
-    <script type="text/javascript" src="js/common.js"></script>
     <script type="text/javascript" src="js/delivery_customer_selection.js"></script>
     <script type="text/javascript" src="js/vendor_selection.js"></script>
     <script type="text/javascript" src="js/calculate_qty.js"></script>
index 973940d..040ed56 100755 (executable)
@@ -65,7 +65,7 @@
 
   <hr size="3" noshade>
 
-  <p>[% LxERP.t8("You can use the following strings in the long description and all translations. They will be replaced by their actual values by Lx-Office before they're output.") %]</p>
+  <p>[% LxERP.t8("You can use the following strings in the long description and all translations. They will be replaced by their actual values by kivitendo before they're output.") %]</p>
 
   <table>
    <tr class="listheading"><th>[%- LxERP.t8('Field') %]</th><th>[%- LxERP.t8('Description') %]</th></tr>
index 0d3fb7e..a3d8648 100644 (file)
@@ -252,7 +252,7 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
                                        fputs($f,"\$Language[$key]=array(\"ERP\"=>$val,\"SHOP\"=>".$_POST["SHOPlang"][$key].");\n");
                        }
                        if (!$DefaultLangOk) {
-                               fputs($f,"\$SHOPdbname=\"\";\n");
+                               //fputs($f,"\$SHOPdbname=\"\";\n");
                                echo "Es wurde keine ERP-Sprache der Shopdefaultsprache zugewiesen.";
                                echo "Verbindung zum Shop abgebrochen<br>";
                        }