File "SortToProjectCreditResource.php"

Full Path: /var/www/html/back/app/Http/Resources/SortToProjectCreditResource.php
File size: 1.45 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Resources;

use App\Domain\Payment\Enums\PaymentTypeEnum;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class SortToProjectCreditResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        $groupedByProject = $this->paymentDistributions
            ->filter(fn($item) => $item->project && $item->payment)
            ->groupBy('project_id');

        $projects = $groupedByProject->map(function ($distributions, $projectId) {
            $project = $distributions->first()->project;

            $totalExtradition = $distributions
                ->filter(fn($item) => $item->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value)
                ->sum(fn($item) => (float)$item->amount);

            $totalAmount = $distributions->sum(fn($item) => (float)$item->amount);

            return [
                'id' => $project->id,
                'description' => $project->description,
                'short_description' => $project->short_description,
                'offer_number' => $project->offer_number,
                'object_address' => $project->object_address,
                'total_extradition' => $totalExtradition,
                'total_amount' => $totalAmount,
            ];
        })->values();

        return [
            'id' => $this->id,
            'name' => $this->name,
            'projects' => $projects->toArray(),
        ];
    }
}