+
+sub erfolgsrechnung {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+ $form->{company} = $::instance_conf->get_company;
+ $form->{address} = $::instance_conf->get_address;
+ $form->{fromdate} = DateTime->new(year => 2000, month => 1, day => 1)->to_kivitendo unless $form->{fromdate};
+ $form->{todate} = $form->current_date(%{$myconfig}) unless $form->{todate};
+
+ my %categories = (I => "ERTRAG", E => "AUFWAND");
+ my $fromdate = conv_dateq($form->{fromdate});
+ my $todate = conv_dateq($form->{todate});
+ my $department_id = conv_i((split /--/, $form->{department})[1], 'NULL');
+
+ $form->{total} = 0;
+
+ foreach my $category ('I', 'E') {
+ my %category = (
+ name => $categories{$category},
+ total => 0,
+ accounts => get_accounts_ch($category)
+ );
+ foreach my $account (@{$category{accounts}}) {
+ $account->{total} = get_total_ch($department_id, $account->{id}, $fromdate, $todate);
+ $category{total} += $account->{total};
+ $account->{total} = $form->format_amount($myconfig, $form->round_amount($account->{total}, 2), 2);
+ }
+ $form->{total} += $category{total};
+ $category{total} = $form->format_amount($myconfig, $form->round_amount($category{total}, 2), 2);
+ push(@{$form->{categories}}, \%category);
+ }
+ $form->{total} = $form->format_amount($myconfig, $form->round_amount($form->{total}, 2), 2);
+
+ $main::lxdebug->leave_sub();
+ return {};
+}
+
+sub get_accounts_ch {
+ $main::lxdebug->enter_sub();
+
+ my ($category) = @_;
+ my $inclusion = '' ;
+
+ if ($category eq 'I') {
+ $inclusion = "AND pos_er = NULL OR pos_er = '1'";
+ } elsif ($category eq 'E') {
+ $inclusion = "AND pos_er = NULL OR pos_er = '6'";
+ } else {
+ $inclusion = "";
+ }
+
+ my $query = qq|
+ SELECT id, accno, description, category
+ FROM chart
+ WHERE category = ? $inclusion
+ ORDER BY accno
+ |;
+ my $accounts = _query($query, $category);
+
+ $main::lxdebug->leave_sub();
+ return $accounts;
+}
+
+sub get_total_ch {
+ $main::lxdebug->enter_sub();
+
+ my ($department_id, $chart_id, $fromdate, $todate) = @_;
+ my $total = 0;
+ my $query = qq|
+ SELECT SUM(amount)
+ FROM acc_trans
+ WHERE chart_id = ?
+ AND transdate >= ?
+ AND transdate <= ?
+ |;
+ if ($department_id) {
+ $query .= qq| AND COALESCE(
+ (SELECT department_id FROM ar WHERE ar.id=trans_id),
+ (SELECT department_id FROM gl WHERE gl.id=trans_id),
+ (SELECT department_id FROM ap WHERE ap.id=trans_id)
+ ) = ? |;
+ $total += _query($query, $chart_id, $fromdate, $todate, $department_id)->[0]->{sum};
+ } else {
+ $total += _query($query, $chart_id, $fromdate, $todate)->[0]->{sum};
+ }
+
+ $main::lxdebug->leave_sub();
+ return $total;
+}
+
+sub _query {return selectall_hashref_query($::form, $::form->get_standard_dbh, @_);}
+