%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/PaymentsController.php

<?php

namespace App\Http\Controllers\Api\v1;


use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\Payments\CreatePaymentRequest;
use App\Models\BaseModel;
use App\Models\Payment;
use App\Models\Project;
use App\Transformers\DayTransformer;
use App\Transformers\PaymentTransformer;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Throwable;

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

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

    public function index(Request $request)
    {
        $user = BaseModel::getLoggedInUser();
        $data = Payment::query()
                       ->private($user);
        if ($projectId = $request->get('projectId')) {
            $data = $data->where('project_id', $projectId);
        }
        if ($search = $request->get('search')) {
            $data = $data->whereHas('project', function (Builder $q) use ($search) {
                $q->where('name', 'like', "%$search%")
                  ->orWhere('code', 'like', "%search%");
            });
        }
        $data = $data->orderBy('status', 'desc')
                     ->orderBy('sent_at', 'desc')
                     ->paginate($request->get('per_page'));
        return $this->collection($data, $this->transformer);
    }

    public function store(CreatePaymentRequest $request)
    {
        try {
            $day = Payment::createItem($request->only([
                'amount',
                'project_id',
            ]));
            return $this->item($day, $this->transformer);
        } catch (Throwable $e) {
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function destroy($payment)
    {
        Payment::destroy($payment);
        return $this->noContent();
    }

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

    public function getProject(Project $project)
    {
        $data = $project->getPaymentInfo();
        return response()->json([
            'data' => $data,
        ], 200);
    }

    public function getMonthly(Request $request)
    {
        return Payment::getMonthly();
    }

    public function awaitingPayment(Request $request)
    {
        return Payment::awaitingPayment();
    }

}

Zerion Mini Shell 1.0