File "OrderInvoiceController.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/Admin/OrderInvoiceController.php
File size: 2.68 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Api\V1\Admin;

use App\Http\Controllers\Controller;
use App\Http\Resources\Admin\InvoiceResource;
use App\Models\Order;
use App\Models\OrderInvoice;
use App\Notifications\OrderInvoiceNotification;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
use Gate;

class OrderInvoiceController extends Controller
{
    public function index(Request $request)
    {
        abort_if(Gate::denies('invoice_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
        $invoices = OrderInvoice::when($request->filled('order_number'), function ($query) use ($request){
            $query->whereHas('order', function ($query) use ($request) {
                $query->where('order_number', 'like', "%{$request->get('order_number')}%");
            });
        })
            ->when($request->filled('invoice_number'), function ($query) use ($request){
                $query->where('invoice_number', 'like', "%{$request->get('invoice_number')}%");
            })
            ->orderBy('created_at', 'DESC')->get();
        InvoiceResource::withoutWrapping();
        return InvoiceResource::collection($invoices);

    }

    public function sendInvoice(Order $order)
    {
        if ($order->invoice_id == null){
            $order->createInvoice();
        }

        $data = [
            'order_number' => $order->order_number ?? '',
            'invoice_number' => $order->invoice->invoice_number ?? '',
            'user_name' => $order->user->name ?? '',
            'phone_number' => $order->user->phone_number ?? '',
            'invoice_url' => $order->invoice->invoiceUrl ?? '',
            'invoice_path' => $order->invoice->invoicePath ?? '',
        ];

        try {
//            $order->user->notify((new OrderInvoiceNotification($data))->delay(now()->addSeconds(5)));
            $order->user->notify((new OrderInvoiceNotification($data)));
            return response()
                ->json(['message' => 'Invoice sent successfully.'], Response::HTTP_OK);

        }catch (\Exception $e){
            Log::info('Mail Error => Sending Order Invoice :'.$order->order_number);
            Log::info($e->getMessage());

            return response()
                ->json([
                    'message' => "Invoice not sent.",
                    'errors' => ["error" => ["Unable to send order invoice."]]
                ], Response::HTTP_INTERNAL_SERVER_ERROR);

        }
    }

    public function store(Request $request)
    {
        //
    }

    public function show($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }
}