File "AccountResource.php"

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

<?php

namespace App\Http\Resources;

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

class AccountResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        $credit = 0;
        $debit = 0;  
        $payments = 0;  

        $currentBalanceIfNotCash = 0;

        //$balanceOfTheDate = 0;
        //$addedDate = Carbon::parse($this->added);

        foreach ($this->payments as $payment) {

            $paymentDate = Carbon::parse($payment->payment_date);

            if ($this->is_cash) {
                if ($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION->value &&
                    $payment->status == PaymentStatusEnum::STATUS_RECEIVED->value
                ) {
                    $credit += $payment->amount;
                } elseif($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_MOVING->value &&
                    $payment->status == PaymentStatusEnum::STATUS_RECEIVED->value) {
                    foreach ($payment->distributions as $distribution) {
                        $credit += $distribution->cashbox;
                    }
                } elseif ($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_ISSUEANCE->value) {
                    if ($payment->status == PaymentStatusEnum::STATUS_ISSUED->value) {
                        $debit += $payment->amount;
                    }
                    elseif (in_array($payment->status, [
                        PaymentStatusEnum::STATUS_APPROVE->value,
                        PaymentStatusEnum::STATUS_AGREE_ONE_TWO->value,
                        PaymentStatusEnum::STATUS_AGREE_TWO_TWO->value,
                        PaymentStatusEnum::STATUS_ISSUE->value,
                    ])) {
                        $payments += $payment->amount;
                    }
                }
            } else {
                if ($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION_FROM_1C->value) {
                    $credit += $payment->amount;
                    $currentBalanceIfNotCash += $payment->amount;
                } elseif ($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_MOVING->value ||
                    $payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_PAYMENT->value
                ) {
                    $debit += $payment->amount;
                    $currentBalanceIfNotCash -= $payment->amount;
                }
            }

            /*if ($addedDate->gt($paymentDate)) {
                if ($payment->payment_type == PaymentTypeEnum::PAYMENT_TYPE_RECEPTION->value) {
                    $balanceOfTheDate += $payment->amount;
                }
            }*/
        }

        $currentBalance = ($this->is_cash) ? $this->balance_of_the_date + $credit - $debit : $this->current_balance;
        $remainingBalance = ($this->is_cash) ? $currentBalance - $payments : null;

        return [
            'id' => $this->id,
            'name' => $this->name,
            'number' => $this->number,
            'organization' => $this->organization_name,
            'date_added' => $this->added,
            'balance_of_the_date' => $this->balance_of_the_date,
            'credit' => $credit,
            'debit' => $debit,
            'payments' => $payments,  // Новое поле которое надо обработать
            'current_balance' => $currentBalance,  
            'remaining_balance' => $remainingBalance, // Новое поле которое надо обработать
            'archived' => $this->archived,
            'is_cash' => $this->is_cash,
        ];
    }
}