Abrechnungsgrüne nun immer erforderlich
This commit is contained in:
@@ -7,6 +7,7 @@ use App\Enumerations\InvoiceStatus;
|
||||
use App\Enumerations\InvoiceType;
|
||||
use App\Enumerations\UserRole;
|
||||
use App\Models\CostUnit;
|
||||
use App\Models\Invoice;
|
||||
use App\Providers\AuthCheckProvider;
|
||||
use App\Resources\CostUnitResource;
|
||||
use App\ValueObjects\Amount;
|
||||
@@ -153,8 +154,7 @@ class CostUnitRepository {
|
||||
|
||||
foreach ($costUnit->invoices()->get() as $invoice) {
|
||||
if (
|
||||
$invoice->status === InvoiceStatus::INVOICE_STATUS_DENIED ||
|
||||
$invoice->donation ||
|
||||
!self::countsAsExpense($invoice) ||
|
||||
$invoice->type !== $invoiceType->slug
|
||||
) {
|
||||
continue;
|
||||
@@ -165,6 +165,52 @@ class CostUnitRepository {
|
||||
return $amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Ausgaben einer Kostenstelle, nach Ausgabentyp gruppiert -- Summe und die Belege dahinter.
|
||||
*
|
||||
* Jeder zählende Typ steht im Ergebnis, auch ohne Beleg: Die Einnahmen-Überschuss-Rechnung zeigt
|
||||
* damit immer dieselbe Gliederung, und eine fehlende Zeile lässt sich nicht mit einer vergessenen
|
||||
* verwechseln.
|
||||
*
|
||||
* @return array<string, array{type: InvoiceType, invoices: array<int, Invoice>, sum: Amount}>
|
||||
*/
|
||||
public function groupExpensesByType(CostUnit $costUnit) : array {
|
||||
$groups = [];
|
||||
|
||||
foreach (InvoiceType::countingAsExpense() as $invoiceType) {
|
||||
$groups[$invoiceType->slug] = [
|
||||
'type' => $invoiceType,
|
||||
'invoices' => [],
|
||||
'sum' => new Amount(0, 'Euro'),
|
||||
];
|
||||
}
|
||||
|
||||
foreach ($costUnit->invoices()->orderBy('invoice_number')->get() as $invoice) {
|
||||
if (!self::countsAsExpense($invoice) || !isset($groups[$invoice->type])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$groups[$invoice->type]['invoices'][] = $invoice;
|
||||
$groups[$invoice->type]['sum']->addAmount(Amount::fromString($invoice->amount));
|
||||
}
|
||||
|
||||
return $groups;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ob ein Beleg als Ausgabe zählt.
|
||||
*
|
||||
* Abgelehnt und gelöscht sind keine Ausgabe, weil kein Geld fließt. Dasselbe gilt für eine gespendete
|
||||
* Auslage: Auf die Auszahlung wurde verzichtet, die Kostenstelle gibt nichts aus.
|
||||
*/
|
||||
private static function countsAsExpense(Invoice $invoice) : bool {
|
||||
return !in_array($invoice->status, [
|
||||
InvoiceStatus::INVOICE_STATUS_DENIED,
|
||||
InvoiceStatus::INVOICE_STATUS_DELETED,
|
||||
], true)
|
||||
&& !$invoice->donation;
|
||||
}
|
||||
|
||||
public function sumupEstimatedByInvoiceType(CostUnit $costUnit, InvoiceType $invoiceType) : Amount {
|
||||
$amount = new Amount(0, 'Euro');
|
||||
foreach ($costUnit->estimates()->get() as $estimate) {
|
||||
|
||||
Reference in New Issue
Block a user