epic-ts
[kivitendo-erp.git] / SL / Drafts.pm
index 63da852..e5242aa 100644 (file)
@@ -14,6 +14,8 @@ use YAML;
 use SL::Common;
 use SL::DBUtils;
 
+use strict;
+
 sub get_module {
   $main::lxdebug->enter_sub();
 
@@ -34,28 +36,36 @@ sub get_module {
   return ($module, $submodule);
 }
 
+my @dont_save = qw(login password action);
+
+sub dont_save {
+  return @dont_save;
+}
+
 sub save {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form, $draft_id, $draft_description) = @_;
 
-  my ($dbh, $sth, $query, %saved, @dont_save, $dumped);
+  my ($dbh, $sth, $query, %saved, $dumped);
 
-  $dbh = $form->dbconnect_noauto($myconfig);
+  $dbh = $form->get_standard_dbh;
+  $dbh->begin_work;
 
   my ($module, $submodule) = $self->get_module($form);
 
   $query = "SELECT COUNT(*) FROM drafts WHERE id = ?";
   my ($res) = selectrow_query($form, $dbh, $query, $draft_id);
+
   if (!$res) {
     $draft_id = $module . "-" . $submodule . "-" . Common::unique_id();
-    $query = "INSERT INTO drafts (id, module, submodule) VALUES (?, ?, ?)";
+    $query    = "INSERT INTO drafts (id, module, submodule) VALUES (?, ?, ?)";
     do_query($form, $dbh, $query, $draft_id, $module, $submodule);
   }
 
-  @dont_save = qw(login password path action);
   map({ $saved{$_} = $form->{$_};
         delete($form->{$_}); } @dont_save);
+
   $dumped = YAML::Dump($form);
   map({ $form->{$_} = $saved{$_}; } @dont_save);
 
@@ -64,13 +74,11 @@ sub save {
     qq|  (SELECT id FROM employee WHERE login = ?) | .
     qq|WHERE id = ?|;
 
-  do_query($form, $dbh, $query, $draft_description, $dumped,
-           $form->{login}, $draft_id);
+  do_query($form, $dbh, $query, $draft_description, $dumped, $::myconfig{login}, $draft_id);
 
   $dbh->commit();
-  $dbh->disconnect();
 
-  $form->{draft_id} = $draft_id;
+  $form->{draft_id}          = $draft_id;
   $form->{draft_description} = $draft_description;
 
   $main::lxdebug->leave_sub();
@@ -83,23 +91,17 @@ sub load {
 
   my ($dbh, $sth, $query, @values);
 
-  $dbh = $form->dbconnect($myconfig);
+  $dbh = $form->get_standard_dbh;
 
   $query = qq|SELECT id, description, form FROM drafts WHERE id = ?|;
 
-  $sth = $dbh->prepare($query);
-  $sth->execute($draft_id) || $form->dberror("$query ($draft_id)");
+  $sth = prepare_execute_query($form, $dbh, $query, $draft_id);
 
-  my @values;
   if (my $ref = $sth->fetchrow_hashref()) {
     @values = ($ref->{form}, $ref->{id}, $ref->{description});
   }
   $sth->finish();
 
-#  do_query($form, $dbh, "DELETE FROM drafts WHERE id = ?", $draft_id);
-
-  $dbh->disconnect();
-
   $main::lxdebug->leave_sub();
 
   return @values;
@@ -108,55 +110,40 @@ sub load {
 sub remove {
   $main::lxdebug->enter_sub();
 
-  my ($self, $myconfig, $form, $draft_id) = @_;
+  my ($self, $myconfig, $form, @draft_ids) = @_;
 
-  return $main::lxdebug->leave_sub() unless ($draft_id);
+  return $main::lxdebug->leave_sub() unless (@draft_ids);
 
-  my ($dbh, $sth, $query, @values);
+  my ($dbh, $sth, $query);
 
-  $dbh = $form->dbconnect($myconfig);
+  $dbh = $form->get_standard_dbh;
 
-  $query = qq|DELETE FROM drafts WHERE id = ?|;
-  do_query($form, $dbh, $query, $draft_id);
+  $query = qq|DELETE FROM drafts WHERE id IN (| . join(", ", map { "?" } @draft_ids) . qq|)|;
+  do_query($form, $dbh, $query, @draft_ids);
 
-  $dbh->disconnect();
+  $dbh->commit;
 
   $main::lxdebug->leave_sub();
 }
 
 sub list {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  my ($dbh, $sth, $query, @values);
-
-  $dbh = $form->dbconnect($myconfig);
-
-  my ($module, $submodule) = $self->get_module($form);
-
-  my @list = ();
-  $query =
-    qq|SELECT d.id, d.description, d.itime::timestamp(0) AS itime, | .
-    qq|  e.name AS employee_name | .
-    qq|FROM drafts d | .
-    qq|LEFT JOIN employee e ON d.employee_id = e.id | .
-    qq|WHERE (d.module = ?) AND (d.submodule = ?) | .
-    qq|ORDER BY d.itime|;
-  my @values = ($module, $submodule);
-
-  $sth = $dbh->prepare($query);
-  $sth->execute(@values) ||
-    $form->dberror($query . " (" . join(", ", @values) . ")");
-
-  while (my $ref = $sth->fetchrow_hashref()) {
-    push(@list, $ref);
-  }
-  $sth->finish();
-
-  $dbh->disconnect();
-
-  $main::lxdebug->leave_sub();
+  $::lxdebug->enter_sub;
+
+  my $self     = shift;
+  my $myconfig = shift || \%::myconfig;
+  my $form     = shift ||  $::form;
+  my $dbh      = $form->get_standard_dbh;
+
+  my @list = selectall_hashref_query($form, $dbh, <<SQL, $self->get_module($form));
+    SELECT d.id, d.description, d.itime::timestamp(0) AS itime,
+      e.name AS employee_name
+    FROM drafts d
+    LEFT JOIN employee e ON d.employee_id = e.id
+    WHERE (d.module = ?) AND (d.submodule = ?)
+    ORDER BY d.itime
+SQL
+
+  $::lxdebug->leave_sub;
 
   return @list;
 }