"alle" E-Mail-Adressen per Anhaken als Empfänger hinzufügen können
[kivitendo-erp.git] / SL / RC.pm
index aa0b492..d7d71a3 100644 (file)
--- a/SL/RC.pm
+++ b/SL/RC.pm
@@ -25,7 +25,8 @@
 # GNU General Public License for more details.
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1335, USA.
 #======================================================================
 #
 # Account reconciliation routines
 package RC;
 
 use SL::DBUtils;
+use SL::DB;
+
+use strict;
 
 sub paymentaccounts {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form) = @_;
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   my $query =
     qq|SELECT accno, description | .
@@ -51,7 +54,6 @@ sub paymentaccounts {
     qq|ORDER BY accno|;
 
   $form->{PR} = selectall_hashref_query($form, $dbh, $query);
-  $dbh->disconnect;
 
   $main::lxdebug->leave_sub();
 }
@@ -62,7 +64,7 @@ sub payment_transactions {
   my ($self, $myconfig, $form) = @_;
 
   # connect to database, turn AutoCommit off
-  my $dbh = $form->dbconnect_noauto($myconfig);
+  my $dbh = SL::DB->client->dbh;
 
   my ($query, @values);
 
@@ -91,13 +93,11 @@ sub payment_transactions {
   ($form->{beginningbalance}, $form->{category}) =
     selectrow_query($form, $dbh, $query, @values);
 
-  my %oid = ('Pg'     => 'ac.acc_trans_id',
-             'Oracle' => 'ac.rowid');
   @values = ();
   $query =
     qq|SELECT c.name, ac.source, ac.transdate, ac.cleared, | .
     qq|  ac.fx_transaction, ac.amount, a.id, | .
-    qq|  $oid{$myconfig->{dbdriver}} AS oid | .
+    qq|  ac.acc_trans_id AS oid | .
     qq|FROM customer c, acc_trans ac, ar a, chart ch | .
     qq|WHERE c.id = a.customer_id | .
     qq|  AND ac.cleared = '0' | .
@@ -116,12 +116,27 @@ sub payment_transactions {
     push(@values, conv_date($form->{todate}));
   }
 
+  if($form->{additional_fromdate}) {
+    $query .= qq|  AND ac.transdate >= ? |;
+    push(@values, conv_date($form->{additional_fromdate}));
+  }
+
+  if($form->{additional_todate}){
+    $query .= qq|  AND ac.transdate <= ? |;
+    push(@values, conv_date($form->{additional_todate}));
+  }
+
+  if($form->{filter_amount}){
+    $query .= qq|  AND ac.amount = ? |;
+    push(@values, conv_i($form->{filter_amount}));
+  }
+
   $query .=
     qq|UNION | .
 
     qq|SELECT v.name, ac.source, ac.transdate, ac.cleared, | .
     qq|  ac.fx_transaction, ac.amount, a.id, | .
-    qq|  $oid{$myconfig->{dbdriver}} AS oid | .
+    qq|  ac.acc_trans_id AS oid | .
     qq|FROM vendor v, acc_trans ac, ap a, chart ch | .
     qq|WHERE v.id = a.vendor_id | .
     qq|  AND ac.cleared = '0' | .
@@ -141,12 +156,27 @@ sub payment_transactions {
     push(@values, conv_date($form->{todate}));
   }
 
+  if($form->{additional_fromdate}) {
+    $query .= qq| AND ac.transdate >= ? |;
+    push(@values, conv_date($form->{additional_fromdate}));
+  }
+
+  if($form->{additional_todate}){
+    $query .= qq| AND ac.transdate <= ? |;
+    push(@values, conv_date($form->{additional_todate}));
+  }
+
+  if($form->{filter_amount}){
+    $query .= qq| AND ac.amount = ? |;
+    push(@values, conv_i($form->{filter_amount}));
+  }
+
   $query .=
     qq|UNION | .
 
     qq|SELECT g.description, ac.source, ac.transdate, ac.cleared, | .
     qq|  ac.fx_transaction, ac.amount, g.id, | .
-    qq|  $oid{$myconfig->{dbdriver}} AS oid | .
+    qq|  ac.acc_trans_id AS oid | .
     qq|FROM gl g, acc_trans ac, chart ch | .
     qq|WHERE g.id = ac.trans_id | .
     qq|  AND ac.cleared = '0' | .
@@ -166,12 +196,25 @@ sub payment_transactions {
     push(@values, conv_date($form->{todate}));
   }
 
+  if($form->{additional_fromdate}) {
+    $query .= qq| AND ac.transdate >= ? |;
+    push(@values, conv_date($form->{additional_fromdate}));
+  }
+
+  if($form->{additional_todate}){
+    $query .= qq| AND ac.transdate <= ? |;
+    push(@values, conv_date($form->{additional_todate}));
+  }
+
+  if($form->{filter_amount}){
+    $query .= qq| AND ac.amount = ? |;
+    push(@values, conv_i($form->{filter_amount}));
+  }
+
   $query .= " ORDER BY 3,7,8";
 
   $form->{PR} = selectall_hashref_query($form, $dbh, $query, @values);
 
-  $dbh->disconnect;
-
   $main::lxdebug->leave_sub();
 }
 
@@ -180,32 +223,57 @@ sub reconcile {
 
   my ($self, $myconfig, $form) = @_;
 
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
+  SL::DB->client->with_transaction(sub {
+    my $dbh = SL::DB->client->dbh;
 
-  my ($query, $i);
-  my %oid = ('Pg'     => 'acc_trans_id',
-             'Oracle' => 'rowid');
+    my ($query, $i);
 
-  # clear flags
-  for $i (1 .. $form->{rowcount}) {
-    if ($form->{"cleared_$i"}) {
-      $query =
-        qq|UPDATE acc_trans SET cleared = '1' | .
-        qq|WHERE $oid{$myconfig->{dbdriver}} = ?|;
-      do_query($form, $dbh, $query, $form->{"oid_$i"});
-
-      # clear fx_transaction
-      if ($form->{"fxoid_$i"}) {
+    # clear flags
+    for $i (1 .. $form->{rowcount}) {
+      if ($form->{"cleared_$i"}) {
         $query =
           qq|UPDATE acc_trans SET cleared = '1' | .
-          qq|WHERE $oid{$myconfig->{dbdriver}} = ?|;
-        do_query($form, $dbh, $query, $form->{"fxoid_$i"});
+          qq|WHERE acc_trans_id = ?|;
+        do_query($form, $dbh, $query, $form->{"oid_$i"});
+
+        # clear fx_transaction
+        if ($form->{"fxoid_$i"}) {
+          $query =
+            qq|UPDATE acc_trans SET cleared = '1' | .
+            qq|WHERE acc_trans_id = ?|;
+          do_query($form, $dbh, $query, $form->{"fxoid_$i"});
+        }
       }
     }
+    1;
+  }) or do { die SL::DB->client->error };
+
+  $main::lxdebug->leave_sub();
+}
+
+sub get_statement_balance {
+  $main::lxdebug->enter_sub();
+
+  my ($self, $myconfig, $form) = @_;
+
+  # connect to database, turn AutoCommit off
+  my $dbh = SL::DB->client->dbh;
+
+  my ($query, @values);
+
+  $query = qq|SELECT sum(amount) FROM acc_trans where chart_id=45 AND cleared='1'|;
+
+  if($form->{fromdate}) {
+    $query .= qq| AND transdate >= ? |;
+    push(@values, conv_date($form->{fromdate}));
+  }
+
+  if($form->{todate}){
+    $query .= qq| AND transdate <= ? |;
+    push(@values, conv_date($form->{todate}));
   }
 
-  $dbh->disconnect;
+  ($form->{statement_balance}) = selectrow_query($form, $dbh, $query, @values);
 
   $main::lxdebug->leave_sub();
 }