Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision dcb0b06f

Von Bernd Bleßmann vor mehr als 4 Jahren hinzugefügt

  • ID dcb0b06f692db05a856ae6c340227291d1b17cc7
  • Vorgänger 4542774a
  • Nachfolger aca4ec87

SelfTest: Transactions: check_summe_stornobuchungen optimiert

Für den zu beobachteten Zeitraum werden jetzt getrennt betrachtet, ob
Rechnungen aus diesem Zeitraum storniert sind und mit Ihren Partnern in
der Summe nicht 0 ergeben,
oder ob
Stornorechnungen in diesem Zeitraum erstellt wurden und mit Ihrem Partner
in der Summer nicht 0 ergeben.

Die Partner müssen jeweils nicht im zu beobachteten Zeitraum liegen.

Da gab es auch schon mal einen Versuch im
commit 56e0744e2835cffe496531708ecfdaabc5b3bfee
"SelfTests check_summe_stornobuchungen optimiert".

Dieser führte aber nur zu langen Abfragezeiten.

Unterschiede anzeigen:

SL/BackgroundJob/SelfTest/Transactions.pm
15 15

  
16 16
  $self->_setup;
17 17

  
18
  $self->tester->plan(tests => 32);
18
  $self->tester->plan(tests => 34);
19 19

  
20 20
  $self->check_konten_mit_saldo_nicht_in_guv;
21 21
  $self->check_bilanzkonten_mit_pos_eur;
......
208 208
sub check_summe_stornobuchungen {
209 209
  my ($self) = @_;
210 210

  
211
  my $query = qq|
212
    SELECT sum(amount) from ar a WHERE a.id IN
213
      (SELECT id from ar where storno is true
214
       AND a.transdate >= ? and a.transdate <= ?)|;
215
  my ($summe_stornobuchungen_ar) = selectfirst_array_query($::form, $self->dbh, $query, $self->fromdate, $self->todate);
216

  
217
  $query = qq|
218
    SELECT sum(amount) from ap a WHERE a.id IN
219
      (SELECT id from ap where storno is true
220
       AND a.transdate >= ? and a.transdate <= ?)|;
221
  my ($summe_stornobuchungen_ap) = selectfirst_array_query($::form, $self->dbh, $query, $self->fromdate, $self->todate);
222

  
223
  $self->tester->ok($summe_stornobuchungen_ap == 0, 'Summe aller Einkaufsrechnungen (stornos + stornierte) soll 0 sein');
224
  $self->tester->ok($summe_stornobuchungen_ar == 0, 'Summe aller Verkaufsrechnungen (stornos + stornierte) soll 0 sein');
225
  $self->tester->diag("Summe Verkaufsrechnungen (ar): $summe_stornobuchungen_ar") if $summe_stornobuchungen_ar;
226
  $self->tester->diag("Summe Einkaufsrechnungen (ap): $summe_stornobuchungen_ap") if $summe_stornobuchungen_ap;
211
  my %sums_canceled;
212
  my %sums_storno;
213
  foreach my $table (qw(ar ap)) {
214
    # check invoices canceled (stornoed) in consideration period (corresponding stornos do not have to be in this period)
215
    my $query = qq|
216
      SELECT sum(amount) FROM $table WHERE id IN (
217
        SELECT id FROM $table WHERE storno IS TRUE AND storno_id IS NULL AND transdate >= ? AND transdate <= ?
218
        UNION
219
        SELECT id FROM $table WHERE storno IS TRUE AND storno_id IS NOT NULL AND storno_id IN
220
          (SELECT id FROM $table WHERE storno IS TRUE AND storno_id IS NULL AND transdate >= ? AND transdate <= ?)
221
      )|;
222
    ($sums_canceled{$table}) = selectfirst_array_query($::form, $self->dbh, $query, $self->fromdate, $self->todate, $self->fromdate, $self->todate);
223

  
224
    # check storno invoices in consideration period (corresponding canceled (stornoed) invoices do not have to be in this period)
225
    $query = qq|
226
      SELECT sum(amount) FROM $table WHERE id IN (
227
        SELECT storno_id FROM $table WHERE storno IS TRUE AND storno_id IS NOT NULL AND transdate >= ? AND transdate <= ?
228
        UNION
229
        SELECT id FROM $table WHERE storno IS TRUE AND storno_id IS NOT NULL AND transdate >= ? AND transdate <= ?
230
      )|;
231
    ($sums_storno{$table}) = selectfirst_array_query($::form, $self->dbh, $query, $self->fromdate, $self->todate, $self->fromdate, $self->todate);
232

  
233
    my $text_rg = ($table eq 'ar') ? 'Verkaufsrechnungen' : 'Einkaufsrechnungen';
234

  
235
    $self->tester->ok($sums_canceled{$table} == 0, "Summe aller $text_rg (stornos + stornierte) soll 0 sein (für stornierte Rechnungen)");
236
    $self->tester->ok($sums_storno  {$table} == 0, "Summe aller $text_rg (stornos + stornierte) soll 0 sein (für Storno-Rechnungen)");
237
    $self->tester->diag("Summe $text_rg ($table) (für stornierte Rechnungen) : " . $sums_canceled{$table}) if $sums_canceled{$table} != 0;
238
    $self->tester->diag("Summe $text_rg ($table) (für Storno-Rechnungen)     : " . $sums_storno  {$table}) if $sums_storno  {$table} != 0;
239
  }
227 240
}
228 241

  
229 242
sub check_ar_paid {

Auch abrufbar als: Unified diff