DB-Upgrade: kein »DROP CONSTRAINT …« nutzen
[kivitendo-erp.git] / SL / DATEV.pm
index f2bd064..c5e081a 100644 (file)
@@ -368,19 +368,32 @@ sub generate_datev_data {
   $main::lxdebug->enter_sub();
 
   my ($self, %params)   = @_;
-  my $fromto            = $params{from_to};
+  my $fromto            = $params{from_to} // '';
   my $progress_callback = $params{progress_callback} || sub {};
 
   my $form     =  $main::form;
 
   my $trans_id_filter = '';
-  my ($ar_department_id_filter, $ap_department_id_filter, $gl_department_id_filter);
+  my $ar_department_id_filter = '';
+  my $ap_department_id_filter = '';
+  my $gl_department_id_filter = '';
   if ( $form->{department_id} ) {
     $ar_department_id_filter = " AND ar.department_id = ? ";
     $ap_department_id_filter = " AND ap.department_id = ? ";
     $gl_department_id_filter = " AND gl.department_id = ? ";
   }
 
+  my ($gl_itime_filter, $ar_itime_filter, $ap_itime_filter);
+  if ( $form->{gldatefrom} ) {
+    $gl_itime_filter = " AND gl.itime >= ? ";
+    $ar_itime_filter = " AND ar.itime >= ? ";
+    $ap_itime_filter = " AND ap.itime >= ? ";
+  } else {
+    $gl_itime_filter = "";
+    $ar_itime_filter = "";
+    $ap_itime_filter = "";
+  }
+
   if ( $self->{trans_id} ) {
     # ignore dates when trans_id is passed so that the entire transaction is
     # checked, not just either the initial bookings or the subsequent payments
@@ -417,6 +430,7 @@ sub generate_datev_data {
        WHERE (ar.id IS NOT NULL)
          AND $fromto
          $trans_id_filter
+         $ar_itime_filter
          $ar_department_id_filter
          $filter
 
@@ -441,6 +455,7 @@ sub generate_datev_data {
        WHERE (ap.id IS NOT NULL)
          AND $fromto
          $trans_id_filter
+         $ap_itime_filter
          $ap_department_id_filter
          $filter
 
@@ -464,14 +479,25 @@ sub generate_datev_data {
        WHERE (gl.id IS NOT NULL)
          AND $fromto
          $trans_id_filter
+         $gl_itime_filter
          $gl_department_id_filter
          $filter
 
        ORDER BY trans_id, acc_trans_id|;
 
   my @query_args;
-  if ( $form->{department_id} ) {
-    push(@query_args, ($form->{department_id}) x 3);
+  if ( $form->{gldatefrom} or $form->{department_id} ) {
+
+    for ( 1 .. 3 ) {
+      if ( $form->{gldatefrom} ) {
+        my $glfromdate = $::locale->parse_date_to_object($form->{gldatefrom});
+        die "illegal data" unless ref($glfromdate) eq 'DateTime';
+        push(@query_args, $glfromdate);
+      }
+      if ( $form->{department_id} ) {
+        push(@query_args, $form->{department_id});
+      }
+    }
   }
 
   my $sth = prepare_execute_query($form, $self->dbh, $query, @query_args);
@@ -1172,7 +1198,7 @@ sub _format_accno {
 sub csv_export_for_tax_accountant {
   my ($self) = @_;
 
-  $self->_get_transactions(from_to => $self->fromto);
+  $self->generate_datev_data(from_to => $self->fromto);
 
   foreach my $transaction (@{ $self->{DATEV} }) {
     foreach my $entry (@{ $transaction }) {
@@ -1200,7 +1226,7 @@ sub csv_export_for_tax_accountant {
     taxkey            => { 'text' => $::locale->text('Taxkey'), },
     tax_accname       => { 'text' => $::locale->text('Tax Account Name'), },
     tax_accno         => { 'text' => $::locale->text('Tax Account'), },
-    transdate         => { 'text' => $::locale->text('Invoice Date'), },
+    transdate         => { 'text' => $::locale->text('Transdate'), },
     vcnumber          => { 'text' => $::locale->text('Customer/Vendor Number'), },
   );
 
@@ -1464,6 +1490,25 @@ Returns a list of errors that occured. If no errors occured, the export was a su
 Exports data. You have to have set L<exporttype> and L<format> or an error will
 occur. OBE exports are currently not implemented.
 
+=item csv_export_for_tax_accountant
+
+Generates up to four downloadable csv files containing data about sales and
+purchase invoices, and their respective payments:
+
+Example:
+  my $startdate = DateTime->new(year => 2012, month =>  1, day =>  1);
+  my $enddate   = DateTime->new(year => 2012, month => 12, day => 31);
+  SL::DATEV->new(from => $startdate, to => $enddate)->csv_export_for_tax_accountant;
+  # {
+  #   'download_token' => '1488551625-815654-22430',
+  #   'filenames' => [
+  #                    'Zahlungen Kreditorenbuchungen 2012-01-01 - 2012-12-31.csv',
+  #                    'Kreditorenbuchungen 2012-01-01 - 2012-12-31.csv',
+  #                    'Zahlungen Debitorenbuchungen 2012-01-01 - 2012-12-31.csv',
+  #                    'Debitorenbuchungen 2012-01-01 - 2012-12-31.csv'
+  #                  ]
+  # };
+
 =back
 
 =head1 ATTRIBUTES