Revision dcb0b06f
Von Bernd Bleßmann vor mehr als 4 Jahren hinzugefügt
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
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.