/
var
/
www
/
html
/
back
/
app
/
Http
/
Resources
/
Upload File
HOME
<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class ShowProjectResource extends JsonResource { /** * Transform the resource into an array. * * @return array<string, mixed> */ public function toArray($request) { $uniqueArticles = $this->articleProjects ->groupBy('article.id') ->map(function ($group) { $totalAmount = $group->sum(function ($paymentDistribution) { return $paymentDistribution->amount; }); $paymentDistribution = $group->first(); return [ 'id' => $paymentDistribution->article->id ?? null, 'name' => $paymentDistribution->article->name ?? null, 'default_in_project' => $paymentDistribution->article->default_in_project ?? false, 'amount_limit' => $paymentDistribution->article?->articleProjectLinks ->where('project_id', $paymentDistribution->project_id) ->first()->amount_limit ?? 0.00 , 'article_type' => $paymentDistribution->article->article_type ?? null, 'payment' => [ 'id' => $paymentDistribution->payment->id, 'name' => $paymentDistribution->payment->name, 'amount' => $totalAmount, 'status' => $paymentDistribution->payment->status, 'payment_type' => $paymentDistribution->payment->payment_type, 'payment_date' => $paymentDistribution->payment->payment_date, ] ?? $paymentDistribution->payment ?? null, ]; }); $uniqueArticlesProject = $this->articleProjectLinks->map(function ($item) { return [ 'id' => $item->article->id, 'name' => $item->article->name, 'default_in_project' => $item->article->default_in_project, 'article_type' => $item->article->article_type, 'amount_limit' => $item->amount_limit, ]; })->unique('id'); $combinedUniqueArticles = $uniqueArticles->concat($uniqueArticlesProject)->unique('id'); return [ 'id' => $this->id, 'description' => $this->description, 'short_description' => $this->short_description, 'offer_number' => $this->offer_number, 'object_address' => $this->object_address, 'project_limits' => $this->project_limits, 'project_limits_credit' => $this->project_limits_credit, 'project_limits_debit' => $this->project_limits_debit, 'status' => $this->status, 'project_group' => $this->projectGroup ? [ 'id' => $this->projectGroup->id, 'name' => $this->projectGroup->name, ] : null, 'payments_by_date' => $this->paymentDistributions->map(function ($item) { return [ 'id' => $item->id, 'amount' => $item->amount, 'comission' => $item->comission, 'cashbox' => $item->cashbox, 'payment' => [ 'id' => $item->payment->id, 'name' => $item->payment->name, 'amount' => '' . $item->amount, 'status' => $item->payment->status, 'payment_type' => $item->payment->payment_type, 'payment_date' => $item->payment->payment_date, 'counterparty' => $item->payment->contragent ? [ 'id' => $item->payment->contragent->id, 'name' => $item->payment->contragent->name, 'inn' => $item->payment->contragent->inn, 'kpp' => $item->payment->contragent->kpp, 'comment' => $item->payment->contragent->comment, 'c_type' => $item->payment->contragent->c_type, ] : null, ], ]; }), 'payments_by_article' => $combinedUniqueArticles, 'payments_by_counterparty' => $this->counterparties->map(function ($item) { $totalAmount = $item->payments->flatMap(function ($payment) { return $payment->distributions; })->sum('amount'); return [ 'id' => $item->id, 'name' => $item->name, 'inn' => $item->inn, 'kpp' => $item->kpp, 'comment' => $item->comment, 'archived' => $item->archived, 'c_type' => $item->c_type, 'total_amount' => number_format($totalAmount, 2, '.', ''), 'payments' => $item->payments->map(function ($payment) { return [ 'id' => $payment->id, 'name' => $payment->name, 'amount' => '' . $payment->distributions->sum('amount'), 'status' => $payment->status, 'payment_type' => $payment->payment_type, 'payment_date' => $payment->payment_date, ]; }), ]; }), ]; } }