$self->_setup;
- $self->tester->plan(tests => 14);
+ $self->tester->plan(tests => 16);
$self->check_konten_mit_saldo_nicht_in_guv;
+ $self->check_bilanzkonten_mit_pos_eur;
$self->check_balanced_individual_transactions;
$self->check_verwaiste_acc_trans_eintraege;
$self->check_netamount_laut_invoice_ar;
$self->check_paid_stornos;
$self->check_stornos_ohne_partner;
$self->check_overpayments;
+ $self->check_every_account_with_taxkey;
$self->calc_saldenvortraege;
}
}
}
+sub check_bilanzkonten_mit_pos_eur {
+ my ($self) = @_;
+
+ my $query = qq|SELECT accno, description FROM chart WHERE (category = 'A' OR category = 'L' OR category = 'Q') AND (pos_eur IS NOT NULL OR pos_eur != 0)|;
+
+ my $bilanzkonten_mit_pos_eur = selectall_hashref_query($::form, $self->dbh, $query);
+ if (@$bilanzkonten_mit_pos_eur) {
+ $self->tester->ok(0, "Es gibt Bilanzkonten die der GuV/EÜR zugeordnet sind)");
+ $self->tester->diag("$_->{accno} $_->{description}") for @$bilanzkonten_mit_pos_eur;
+ } else {
+ $self->tester->ok(1, "Keine Bilanzkonten in der GuV");
+ }
+}
+
sub check_balanced_individual_transactions {
my ($self) = @_;
AND a.transdate >= ? and a.transdate <= ?|;
my ($summe_stornobuchungen_ap) = selectfirst_array_query($::form, $self->dbh, $query, $self->fromdate, $self->todate);
- $self->tester->ok($summe_stornobuchungen_ap == 0, 'Summe aller Einkaufsrechnungen (stornos + stronierte) soll 0 sein');
- $self->tester->ok($summe_stornobuchungen_ar == 0, 'Summe aller Verkaufsrechnungen (stornos + stronierte) soll 0 sein');
+ $self->tester->ok($summe_stornobuchungen_ap == 0, 'Summe aller Einkaufsrechnungen (stornos + stornierte) soll 0 sein');
+ $self->tester->ok($summe_stornobuchungen_ar == 0, 'Summe aller Verkaufsrechnungen (stornos + stornierte) soll 0 sein');
$self->tester->diag("Summe Einkaufsrechnungen (ar): $summe_stornobuchungen_ar") if $summe_stornobuchungen_ar;
$self->tester->diag("Summe Einkaufsrechnungen (ap): $summe_stornobuchungen_ap") if $summe_stornobuchungen_ap;
}
my ($self) = @_;
my $query = qq|
- select ar.id,invnumber,storno,amount,transdate,type,customernumber
- from ar
- left join customer c on (c.id = ar.customer_id)
- where storno_id is null and storno is true and ar.id not in (select storno_id from ar where storno_id is not null and storno is true);
+ SELECT (SELECT cast ('ar' as text)) as invoice ,ar.id,invnumber,storno,amount,transdate,type,customernumber as cv_number
+ FROM ar
+ LEFT JOIN customer c on (c.id = ar.customer_id)
+ WHERE storno_id is null AND storno is true AND ar.id not in (SELECT storno_id FROM ar WHERE storno_id is not null AND storno is true)
+ UNION
+ SELECT (SELECT cast ('ap' as text)) as invoice,ap.id,invnumber,storno,amount,transdate,type,vendornumber as cv_number
+ FROM ap
+ LEFT JOIN vendor v on (v.id = ap.vendor_id)
+ WHERE storno_id is null AND storno is true AND ap.id not in (SELECT storno_id FROM ap WHERE storno_id is not null AND storno is true);
|;
+
my $stornos_ohne_partner = selectall_hashref_query($::form, $self->dbh, $query);
$self->tester->ok(@$stornos_ohne_partner == 0, 'Es sollte keine Stornos ohne Partner geben');
if (@$stornos_ohne_partner) {
- $self->tester->diag("stornos ohne partner: (kann passieren wenn Stornorechnung außerhalb Zeitraum liegt)");
+ $self->tester->diag("Stornos ohne Partner: (kann passieren wenn Stornorechnung außerhalb Zeitraum liegt)");
$self->tester->diag("gilt aber trotzdem als paid zu dem Zeitpunkt, oder?");
}
my $stornoheader = 0;
$self->tester->diag("Saldo $saldenvortragskonto am 31.12.@{[DateTime->today->year]}: @{[ $saldo_9000_jahresende * 1 ]} (sollte 0 sein)");
}
+sub check_every_account_with_taxkey {
+ my ($self) = @_;
+
+ my $query = qq|SELECT accno, description FROM chart WHERE id NOT IN (select chart_id from taxkeys)|;
+ my $accounts_without_tk = selectall_hashref_query($::form, $self->dbh, $query);
+
+ if ( scalar @{ $accounts_without_tk } > 0 ){
+ $self->tester->ok(0, "Folgende Konten haben keinen gültigen Steuerschlüssel:");
+
+ for my $account_without_tk (@{ $accounts_without_tk } ) {
+ $self->tester->diag("Kontonummer: $account_without_tk->{accno} Beschreibung: $account_without_tk->{description}");
+ }
+ } else {
+ $self->tester->ok(1, "Jedes Konto hat einen gültigen Steuerschlüssel!");
+ }
+}
+
1;
__END__
=head1 AUTHOR
-Geoffrey Richardsom E<lt>information@richardsonbueren.deE<gt>
-Jan Büren E<lt>information@richardsonbueren.deE<gt>
+G. Richardson E<lt>information@richardson-bueren.deE<gt>
+Jan Büren E<lt>information@richardson-bueren.deE<gt>
Sven Schoeling E<lt>s.schoeling@linet-services.deE<gt>
=cut