/
var
/
www
/
html
/
back
/
app
/
Http
/
Resources
/
Upload File
HOME
<?php namespace App\Http\Resources; use App\Domain\Article\Enums\ArticleTypeEnum; use App\Domain\Payment\Enums\PaymentStatusEnum; use App\Domain\Payment\Enums\PaymentTypeEnum; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\Log; class ProjectGroupResource extends JsonResource { /** * Transform the resource into an array. * * @return array<string, mixed> */ public function toArray(Request $request): array { $totalLimitCredit = 0; $totalLimitDebit = 0; $this->projects->each(function ($item) use (&$totalLimitCredit, &$totalLimitDebit) { $totalLimitCredit += $item->project_limits_credit; $totalLimitDebit += $item->project_limits_debit; }); $this->projects->map(function ($item) use (&$totalAmountCredit, &$totalAmountDebit, &$totalCountPaymentStatusNotFinal, &$totalAmountPayment) { $creditAmount = 0; $debitAmount = 0; if (isset($item->paymentDistributions) && is_iterable($item->paymentDistributions)) { foreach ($item->paymentDistributions as $distribution) { if (isset($distribution->payment)) { $amount = (float)$distribution->amount; if (($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C->value)) { $creditAmount += $amount; } else { $debitAmount += $amount; } } } } $totalAmountCredit += $creditAmount; $totalAmountDebit += $debitAmount; }); $totalCountPaymentStatusNotFinal = 0; $totalAmountPayment = 0; $this->projects->each(function ($item) use (&$totalCountPaymentStatusNotFinal, &$totalAmountPayment) { $countPayment = 0; $amountPayment = 0; foreach ($item->paymentDistributions as $distribution) { if ((($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_MOVING->value)) && (($distribution->payment->status != PaymentStatusEnum::STATUS_PAID->value) && ($distribution->payment->status != PaymentStatusEnum::STATUS_ISSUED->value) && ($distribution->payment->status != PaymentStatusEnum::STATUS_RECEIVED->value))) { $countPayment += 1; $amountPayment += $distribution->amount; } } $totalCountPaymentStatusNotFinal += $countPayment; $totalAmountPayment += $amountPayment; }); return [ 'id' => $this->id, 'name' => $this->name, 'description' => $this->description, 'total_limits' => [ 'credit' => $totalLimitDebit, 'debit' => $totalLimitCredit, ], 'total_amounts' => [ 'total_credit' => $totalAmountCredit, 'total_debit' => $totalAmountDebit ], 'total_payments' => [ 'in_process' => $totalCountPaymentStatusNotFinal, 'total_amount_payment' => $totalAmountPayment, ], 'projects' => $this->projects->map(function ($item) { $creditAmount = 0; $debitAmount = 0; $countPaymentStatusNotFinal = 0; $projectAmountPayment = 0; if (isset($item->paymentDistributions) && is_iterable($item->paymentDistributions)) { foreach ($item->paymentDistributions as $distribution) { if (($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C->value)) { $creditAmount += (float)$distribution->amount; } else { $debitAmount += (float)$distribution->amount; } if ((($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value) || ($distribution->payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_MOVING->value)) && (($distribution->payment->status != PaymentStatusEnum::STATUS_PAID->value) && ($distribution->payment->status != PaymentStatusEnum::STATUS_ISSUED->value) && ($distribution->payment->status != PaymentStatusEnum::STATUS_RECEIVED->value))) { $countPaymentStatusNotFinal += 1; $projectAmountPayment += $distribution->amount; } } } return [ 'id' => $item->id, 'status' => $item->status, 'description' => $item->description, 'short_description' => $item->short_description, 'offer_number' => $item->offer_number, 'object_address' => $item->object_address, 'project_limits' => [ 'credit' => $item->project_limits_debit, 'debit' => $item->project_limits_credit, ], 'project_amounts' => [ 'credit' => $creditAmount, 'debit' => $debitAmount, ], 'project_payments' => [ 'in_process' => $countPaymentStatusNotFinal, 'total_amount_payment' => $projectAmountPayment, ], ]; }), ]; } }