+sub calculate_costs {
+ my ($self) = @_;
+
+ # Relevante BWA-Positionen für Kosten:
+ # 4 – Mat./Wareneinkauf
+ # 10 – Personalkosten
+ # 11 – Raumkosten
+ # 12 – Betriebl.Steuern
+ # 13 – Versicherungsbeiträge
+ # 14 – KFZ-Kosten ohne Steuern
+ # 15 – Werbe-/Reisekosten
+ # 16 – Kosten Warenabgabe
+ # 17 – Abschreibungen
+ # 18 – Reparatur/Instandhaltung
+ # 20 – Sonstige Kosten
+ my $query = <<SQL;
+ SELECT SUM(ac.amount * chart_category_to_sgn(c.category)) AS amount,
+ EXTRACT(month FROM ac.transdate) AS month
+ FROM acc_trans ac
+ LEFT JOIN chart c ON (c.id = ac.chart_id)
+ WHERE (c.pos_bwa IN (4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20))
+ AND (ac.transdate >= ?)
+ AND (ac.transdate < ?)
+ GROUP BY month
+SQL
+
+ my @args = (
+ DateTime->new_local(day => 1, month => 1, year => $self->year)->to_kivitendo,
+ DateTime->new_local(day => 1, month => 1, year => $self->year + 1)->to_kivitendo,
+ );
+
+ my @results = selectall_hashref_query($::form, SL::DB::AccTransaction->new->db->dbh, $query, @args);
+ foreach my $row (@results) {
+ my $month = $row->{month} - 1;
+ my $tdata = $self->data->{costs};
+
+ $tdata->{months}->[$month] += $row->{amount};
+ $tdata->{quarters}->[int($month / 3)] += $row->{amount};
+ $tdata->{year} += $row->{amount};
+ }
+}
+