Merge branch 'master' of github.com:kivitendo/kivitendo-erp
authorJan Büren <jan@kivitendo-premium.de>
Thu, 9 Jan 2014 11:47:36 +0000 (12:47 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Thu, 9 Jan 2014 11:47:36 +0000 (12:47 +0100)
SL/Controller/Admin.pm
SL/Controller/CsvImport/Part.pm
SL/DB/Manager/Employee.pm
SL/DB/MetaSetup/Employee.pm
SL/Form.pm
locale/de/all
sql/Pg-upgrade2/employee_drop_columns.sql [new file with mode: 0644]
templates/webpages/csv_import/form.html

index 179142c..0481926 100644 (file)
@@ -172,6 +172,10 @@ sub action_delete_user {
 
   my @clients = @{ $self->user->clients || [] };
 
+  # backup user metadata (email, name, etc)
+  my $user_config_values_ref = $self->user->config_values();
+  my $login =$self->user->login;
+
   if (!$self->user->delete) {
     flash('error', t8('The user could not be deleted.'));
     $self->edit_user_form(title => t8('Edit User'));
@@ -179,9 +183,15 @@ sub action_delete_user {
   }
 
   # Flag corresponding entries in 'employee' as deleted.
+  # and restore the most important user data in employee
+  # TODO try and catch the whole transaction {user->delete; update employee} {exception}
   foreach my $client (@clients) {
     my $dbh = $client->dbconnect(AutoCommit => 1) || next;
-    $dbh->do(qq|UPDATE employee SET deleted = TRUE WHERE login = ?|, undef, $self->user->login);
+    $dbh->do(qq|UPDATE employee SET deleted = TRUE, name = ?, deleted_email = ?,
+                deleted_tel = ?, deleted_fax = ?, deleted_signature = ? WHERE login = ?|,undef,
+              $user_config_values_ref->{name}, $user_config_values_ref->{email},
+              $user_config_values_ref->{tel}, $user_config_values_ref->{fax},
+              $user_config_values_ref->{signature}, $self->user->login);
     $dbh->disconnect;
   }
 
index 0cb132f..90d0b71 100644 (file)
@@ -485,7 +485,7 @@ sub setup_displayable_columns {
                                  { name => 'not_discountable',   description => $::locale->text('Not Discountable')                                     },
                                  { name => 'notes',              description => $::locale->text('Notes')                                                },
                                  { name => 'obsolete',           description => $::locale->text('Obsolete')                                             },
-                                 { name => 'onhand',             description => $::locale->text('On Hand')                                              },
+                                 { name => 'onhand',             description => $::locale->text('On Hand') . ' [2]'                                     },
                                  { name => 'partnumber',         description => $::locale->text('Part Number')                                          },
                                  { name => 'partsgroup_id',      description => $::locale->text('Partsgroup (database ID)')                             },
                                  { name => 'partsgroup',         description => $::locale->text('Partsgroup (name)')                                    },
index b4ebf14..8acd7da 100644 (file)
@@ -26,7 +26,6 @@ sub update_entries_for_authorized_users {
 
     $employee->update_attributes(
       name      => $user_config->{name},
-      workphone => $user_config->{tel},
       deleted   => 0,
     );
   }
index b79d078..6cdc930 100644 (file)
@@ -9,22 +9,19 @@ use base qw(SL::DB::Object);
 __PACKAGE__->meta->table('employee');
 
 __PACKAGE__->meta->columns(
-  addr1     => { type => 'text' },
-  addr2     => { type => 'text' },
-  addr3     => { type => 'text' },
-  addr4     => { type => 'text' },
-  deleted   => { type => 'boolean', default => 'false' },
-  enddate   => { type => 'date' },
-  homephone => { type => 'text' },
-  id        => { type => 'integer', not_null => 1, sequence => 'id' },
-  itime     => { type => 'timestamp', default => 'now()' },
-  login     => { type => 'text' },
-  mtime     => { type => 'timestamp' },
-  name      => { type => 'text' },
-  notes     => { type => 'text' },
-  sales     => { type => 'boolean', default => 'true' },
-  startdate => { type => 'date', default => 'now' },
-  workphone => { type => 'text' },
+  deleted           => { type => 'boolean', default => 'false' },
+  deleted_email     => { type => 'text' },
+  deleted_fax       => { type => 'text' },
+  deleted_signature => { type => 'text' },
+  deleted_tel       => { type => 'text' },
+  enddate           => { type => 'date' },
+  id                => { type => 'integer', not_null => 1, sequence => 'id' },
+  itime             => { type => 'timestamp', default => 'now()' },
+  login             => { type => 'text' },
+  mtime             => { type => 'timestamp' },
+  name              => { type => 'text' },
+  sales             => { type => 'boolean', default => 'true' },
+  startdate         => { type => 'date', default => 'now' },
 );
 
 __PACKAGE__->meta->primary_key_columns([ 'id' ]);
index fe685d2..a11b7ad 100644 (file)
@@ -1926,17 +1926,24 @@ sub get_employee_data {
   my $myconfig = \%main::myconfig;
   my $dbh      = $params{dbh} || $self->get_standard_dbh($myconfig);
 
-  my ($login)  = selectrow_query($self, $dbh, qq|SELECT login FROM employee WHERE id = ?|, conv_i($params{id}));
+  my ($login, $deleted)  = selectrow_query($self, $dbh, qq|SELECT login,deleted FROM employee WHERE id = ?|, conv_i($params{id}));
 
   if ($login) {
-    my $user = User->new(login => $login);
-    $self->{$params{prefix} . "_${_}"}    = $user->{$_}   for qw(email fax name signature tel);
-    $self->{$params{prefix} . "_${_}"}    = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
-
+    # login already fetched and still the same client (mandant) | same for both cases (delete|!delete)
     $self->{$params{prefix} . '_login'}   = $login;
-    $self->{$params{prefix} . '_name'}  ||= $login;
-  }
+    $self->{$params{prefix} . "_${_}"}    = $defaults->$_ for qw(address businessnumber co_ustid company duns taxnumber);
 
+    if (!$deleted) {
+      # get employee data from auth.user_config
+      my $user = User->new(login => $login);
+      $self->{$params{prefix} . "_${_}"} = $user->{$_} for qw(email fax name signature tel);
+    } else {
+      # get saved employee data from employee
+      my $employee = SL::DB::Manager::Employee->find_by(id => conv_i($params{id}));
+      $self->{$params{prefix} . "_${_}"} = $employee->{"deleted_$_"} for qw(email fax signature tel);
+      $self->{$params{prefix} . "_name"} = $employee->name;
+    }
+ }
   $main::lxdebug->leave_sub();
 }
 
index 846f6a2..98d6920 100755 (executable)
@@ -1453,6 +1453,7 @@ $self->{texts} = {
   'On Hand'                     => 'Auf Lager',
   'On Order'                    => 'Ist bestellt',
   'One or more Perl modules missing' => 'Ein oder mehr Perl-Module fehlen',
+  'Onhand only sets the quantity in master data, not in inventory. This is only a legacy info field and will be overwritten as soon as a inventory transfer happens.' => 'Das Import-Feld Auf Lager setzt nur die Menge in den Stammdaten, nicht im Lagerbereich. Dies ist historisch gewachsen nur ein Informationsfeld was mit dem tatsächlichen Wert überschrieben wird, sobald eine wirkliche Lagerbewegung stattfindet (DB-Trigger).',
   'Only Warnings and Errors'    => 'Nur Warnungen und Fehler',
   'Only due follow-ups'         => 'Nur f&auml;llige Wiedervorlagen',
   'Only groups that have been configured for the client the user logs in to will be considered.' => 'Allerdings werden nur diejenigen Gruppen herangezogen, die für den Mandanten konfiguriert sind.',
diff --git a/sql/Pg-upgrade2/employee_drop_columns.sql b/sql/Pg-upgrade2/employee_drop_columns.sql
new file mode 100644 (file)
index 0000000..a87cf05
--- /dev/null
@@ -0,0 +1,16 @@
+-- @tag: employee_drop_columns
+-- @description: Obsolete Felder in employee entfernt und Datenfelder zum Speichern für die Historie der Mitarbeiter (nach Löschen eines Benutzer) hinzugefügt. Aktuell alle Felder die der Benutzer unter persönliche Einstellungen ändern kann
+-- @depends: release_3_0_0
+-- @ignore: 0
+-- @charset: utf-8
+ALTER TABLE employee DROP COLUMN addr1;
+ALTER TABLE employee DROP COLUMN addr2;
+ALTER TABLE employee DROP COLUMN addr3;
+ALTER TABLE employee DROP COLUMN addr4;
+ALTER TABLE employee DROP COLUMN homephone;
+ALTER TABLE employee DROP COLUMN workphone;
+ALTER TABLE employee DROP COLUMN notes;
+ALTER TABLE employee ADD COLUMN deleted_email text;
+ALTER TABLE employee ADD COLUMN deleted_signature text;
+ALTER TABLE employee ADD COLUMN deleted_tel text;
+ALTER TABLE employee ADD COLUMN deleted_fax text;
index 5b189ec..4a9672b 100644 (file)
     [% LxERP.t8('The items are imported accoring do their number "X" regardless of the column order inside the file.') %]
     [% LxERP.t8('The column "make_X" can contain either a vendor\'s database ID, a vendor number or a vendor\'s name.') %]
    </p>
+    <p>
+    [2]:
+    [% LxERP.t8('Onhand only sets the quantity in master data, not in inventory. This is only a legacy info field and will be overwritten as soon as a inventory transfer happens.') %]
+   </p>
 
 [%- ELSIF SELF.type == 'orders' %]
    <p>