Part Controller -part link in Verbrauchsbericht (?) aktualisiert
[kivitendo-erp.git] / SL / OE.pm
index 31b3067..d347d5b 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -51,6 +51,7 @@ use SL::HTML::Restrict;
 use SL::IC;
 use SL::TransNumber;
 use SL::Util qw(trim);
+use SL::DB;
 use Text::ParseWords;
 
 use strict;
@@ -419,12 +420,22 @@ sub transactions_for_todo_list {
 }
 
 sub save {
+  my ($self, $myconfig, $form) = @_;
+  $main::lxdebug->enter_sub();
+
+  my $rc = SL::DB->client->with_transaction(\&_save, $self, $myconfig, $form);
+
+  $::lxdebug->leave_sub;
+
+  return $rc;
+}
+
+sub _save {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form) = @_;
 
-  # connect to database, turn off autocommit
-  my $dbh = $form->get_standard_dbh;
+  my $dbh = SL::DB->client->dbh;
   my $restricter = SL::HTML::Restrict->create;
 
   my ($query, @values, $sth, $null);
@@ -793,8 +804,6 @@ SQL
 
   Common::webdav_folder($form);
 
-  my $rc = $dbh->commit;
-
   $self->save_periodic_invoices_config(dbh         => $dbh,
                                        oe_id       => $form->{id},
                                        config_yaml => $form->{periodic_invoices_config})
@@ -802,7 +811,7 @@ SQL
 
   $main::lxdebug->leave_sub();
 
-  return $rc;
+  return 1;
 }
 
 sub save_periodic_invoices_config {
@@ -846,37 +855,38 @@ sub _close_quotations_rfqs {
   my $myconfig = \%main::myconfig;
   my $form     = $main::form;
 
-  my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);
+  my $dbh      = $params{dbh} || SL::DB->client->dbh;
 
-  my $query    = qq|SELECT quotation FROM oe WHERE id = ?|;
-  my $sth      = prepare_query($form, $dbh, $query);
+  SL::DB->client->with_transaction(sub {
 
-  do_statement($form, $sth, $query, conv_i($params{to_id}));
+    my $query    = qq|SELECT quotation FROM oe WHERE id = ?|;
+    my $sth      = prepare_query($form, $dbh, $query);
 
-  my ($quotation) = $sth->fetchrow_array();
+    do_statement($form, $sth, $query, conv_i($params{to_id}));
 
-  if ($quotation) {
-    $main::lxdebug->leave_sub();
-    return;
-  }
+    my ($quotation) = $sth->fetchrow_array();
 
-  my @close_ids;
+    if ($quotation) {
+      return 1;
+    }
 
-  foreach my $from_id (@{ $params{from_id} }) {
-    $from_id = conv_i($from_id);
-    do_statement($form, $sth, $query, $from_id);
-    ($quotation) = $sth->fetchrow_array();
-    push @close_ids, $from_id if ($quotation);
-  }
+    my @close_ids;
 
-  $sth->finish();
+    foreach my $from_id (@{ $params{from_id} }) {
+      $from_id = conv_i($from_id);
+      do_statement($form, $sth, $query, $from_id);
+      ($quotation) = $sth->fetchrow_array();
+      push @close_ids, $from_id if ($quotation);
+    }
 
-  if (scalar @close_ids) {
-    $query = qq|UPDATE oe SET closed = TRUE WHERE id IN (| . join(', ', ('?') x scalar @close_ids) . qq|)|;
-    do_query($form, $dbh, $query, @close_ids);
+    $sth->finish();
 
-    $dbh->commit() unless ($params{dbh});
-  }
+    if (scalar @close_ids) {
+      $query = qq|UPDATE oe SET closed = TRUE WHERE id IN (| . join(', ', ('?') x scalar @close_ids) . qq|)|;
+      do_query($form, $dbh, $query, @close_ids);
+    }
+    1;
+  }) or do { die SL::DB->client->error };
 
   $main::lxdebug->leave_sub();
 }
@@ -895,7 +905,7 @@ sub delete {
     unlink map { "$spool/$_" } @spoolfiles if $spool;
 
     1;
-  });
+  }) or do { die SL::DB->client->error };
 
   $main::lxdebug->leave_sub();
 
@@ -903,12 +913,20 @@ sub delete {
 }
 
 sub retrieve {
+  my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_retrieve, $self, $myconfig, $form);
+
+  $::lxdebug->leave_sub;
+  return $rc;
+}
+
+sub _retrieve {
   my ($self, $myconfig, $form) = @_;
 
   # connect to database
-  my $dbh = $form->get_standard_dbh;
+  my $dbh = SL::DB->client->dbh;
 
   my ($query, $query_add, @values, @ids, $sth);
 
@@ -1075,8 +1093,8 @@ sub retrieve {
            c2.accno AS income_accno,    c2.new_chart_id AS income_new_chart,    date($transdate) - c2.valid_from as income_valid,
            c3.accno AS expense_accno,   c3.new_chart_id AS expense_new_chart,   date($transdate) - c3.valid_from as expense_valid,
            oe.ordnumber AS ordnumber_oe, oe.transdate AS transdate_oe, oe.cusordnumber AS cusordnumber_oe,
-           p.partnumber, p.assembly, p.listprice, o.description, o.qty,
-           o.sellprice, o.parts_id AS id, o.unit, o.discount, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id,
+           p.partnumber, p.part_type, p.listprice, o.description, o.qty,
+           o.sellprice, o.parts_id AS id, o.unit, o.discount, p.notes AS partnotes, p.part_type,
            o.reqdate, o.project_id, o.serialnumber, o.ship, o.lastcost,
            o.ordnumber, o.transdate, o.cusordnumber, o.subtotal, o.longdescription,
            o.price_factor_id, o.price_factor, o.marge_price_factor, o.active_price_source, o.active_discount_source,
@@ -1108,10 +1126,10 @@ sub retrieve {
       map { $ref->{"ic_cvar_$_->{name}"} = $_->{value} } @{ $cvars };
 
       # Handle accounts.
-      if (!$ref->{"part_inventory_accno_id"}) {
+      if (!$ref->{"part_type"} eq 'part') {
         map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid));
       }
-      delete($ref->{"part_inventory_accno_id"});
+      delete($ref->{"part_inventory_accno_id"});
 
       # in collective order, copy global ordnumber, transdate, cusordnumber into item scope
       #   unless already present there
@@ -1206,11 +1224,7 @@ sub retrieve {
 
   $self->load_periodic_invoice_config($form);
 
-  my $rc = $dbh->commit;
-
-  $main::lxdebug->leave_sub();
-
-  return $rc;
+  return 1;
 }
 
 sub retrieve_simple {
@@ -1243,7 +1257,7 @@ sub order_details {
   my ($self, $myconfig, $form) = @_;
 
   # connect to database
-  my $dbh = $form->get_standard_dbh;
+  my $dbh = SL::DB->client->dbh;
   my $query;
   my @values = ();
   my $sth;
@@ -1591,13 +1605,8 @@ sub order_details {
 
   $form->{username} = $myconfig->{name};
 
-  $dbh->disconnect;
-
   $form->{delivery_term} = SL::DB::Manager::DeliveryTerm->find_by(id => $form->{delivery_term_id} || undef);
-  if ($form->{delivery_term} && $form->{language_id}) {
-    $form->{delivery_term}->description_long(        $form->{delivery_term}->translated_attribute('description_long',         $form->{language_id}));
-    $form->{delivery_term}->description_long_invoice($form->{delivery_term}->translated_attribute('description_long_invoice', $form->{language_id}));
-  }
+  $form->{delivery_term}->description_long($form->{delivery_term}->translated_attribute('description_long', $form->{language_id})) if $form->{delivery_term} && $form->{language_id};
 
   $form->{order} = SL::DB::Manager::Order->find_by(id => $form->{id}) if $form->{id};