• File: MoneyRequestController.php
  • Full Path: /var/www/imaliapi/app/Http/Controllers/MoneyRequestController.php
  • Date Modified: 06/06/2025 9:01 PM
  • File size: 10.94 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\Classes\TransactionGeneration;
use App\Imali\ImaliAccount;
use App\MoneyRequest;
use App\User;
use App\UserMoneyRequest;
use Illuminate\Http\Request;

class MoneyRequestController extends Controller
{
    public function getPedido($id, $clientId)
    {
        $pedidos = MoneyRequest::query()
            //            ->join('users', 'users.id', '=', 'money_requests.user_id')
            ->join('user_money_requests', 'user_money_requests.money_request_id', '=', 'money_requests.id')
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'user_money_requests.user_id')
            //            ->join('imali_accounts as imali_accounts_clients', 'imali_accounts_clients.user_id', '=', 'user_money_requests.user_id')
            ->join('imali_accounts as imali_accounts_clients', 'imali_accounts_clients.user_id', '=', 'user_money_requests.client_id')
            ->join('users as client', 'client.id', '=', 'user_money_requests.client_id')
            //            ->join('users as client', 'client.id', '=', 'user_money_requests.user_id')
            //            ->where('user_money_requests.user_id', $request->user()->id)
            ->where('money_requests.id', $id)
            ->where('user_money_requests.user_id', $clientId)
            ->select('money_requests.*', 'client.name', 'client.phone', 'imali_accounts_clients.account_number', 'user_money_requests.user_status')
            //                ->select('money_requests.*', 'user_money_requests.user_status')
            ->orderByDesc('money_requests.created_at')
            ->first();

        return response()->json($pedidos);
    }

    public function getMeusPedidos(Request $request)
    {

        //        $pedidos = MoneyRequest::query()
        //            ->join('users', 'users.id', '=', 'money_requests.user_id')
        //            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'money_requests.user_id')
        //            ->join('imali_accounts as imali_accounts_clients', 'imali_accounts_clients.user_id', '=', 'money_requests.client_id')
        //            ->join('users as client', 'client.id', '=', 'money_requests.client_id')
        //            ->where('money_requests.user_id', $request->user()->id)
        //            ->select('money_requests.*', 'client.name', 'client.phone', 'imali_accounts_clients.account_number')
        //            ->orderByDesc('money_requests.created_at')
        //            ->get();
        $size = (!request()->per_page) ? 4 : request()->per_page;

        $new_start_date  = null;
        $new_end_date  = null;

        if ($request->filled('start_date')) {
            $start_date = explode('-', $request->start_date);
            if (strlen($start_date[2]) >= 4)
                $new_start_date = $start_date[2] . '-' . $start_date[1] . '-' . $start_date[0];
        }

        if ($request->filled('end_date')) {
            $end_date = explode('-', $request->end_date);
            if (strlen($end_date[2]) >= 4)
                $new_end_date = $end_date[2] . '-' . $end_date[1] . '-' . $end_date[0];
        }

        $pedidos = MoneyRequest::query()
            //            ->join('users', 'users.id', '=', 'money_requests.user_id')
            ->join('user_money_requests', 'user_money_requests.money_request_id', '=', 'money_requests.id')
            ->join('imali_accounts', 'imali_accounts.user_id', '=', 'user_money_requests.user_id')
            //            ->join('imali_accounts as imali_accounts_clients', 'imali_accounts_clients.user_id', '=', 'user_money_requests.user_id')
            ->join('imali_accounts as imali_accounts_clients', 'imali_accounts_clients.user_id', '=', 'user_money_requests.client_id')
            ->join('users as client', 'client.id', '=', 'user_money_requests.client_id')
            //            ->join('users as client', 'client.id', '=', 'user_money_requests.user_id')
            ->where('user_money_requests.user_id', $request->user()->id)
            ->select('money_requests.*', 'client.name', 'client.phone', 'imali_accounts_clients.account_number', 'user_money_requests.user_status')
            //                ->select('money_requests.*', 'user_money_requests.user_status')
            // new ------------------------
            ->when($request->filled('start_date'), function ($query) use ($request, $new_start_date) {
                $query->whereDate('money_requests.created_at', '>=', $new_start_date ?? $request->start_date);
            })
            ->when($request->filled('end_date'), function ($query) use ($request, $new_end_date) {
                $query->whereDate('money_requests.created_at', '<=', $new_end_date ?? $request->end_date);
            })
            // new ------------------------
            ->orderByDesc('money_requests.created_at')
            // ->get();
            ->paginate($size);

        return response()->json($pedidos, 200);


        //return response()->json(['data' => $pedidos]);
    }

    public function requestMoney(Request $request)
    {
        $client = User::query()->where('phone', $request->phone)->first();
        $token = new TransactionGeneration();
        $imali = ImaliAccount::query()->where('user_id', $request->user()->id)->first();

        $response = MoneyRequest::create([
            'transaction' => $token->generateTransaction(),
            'amount' => $request->amount,
            'fee' => 0,
            'description' => $request->description,
            'user_id' => $request->user()->id,
            'client_id' => $client->id,
            //'user_id' => $client->id,
            //'client_id' => $request->user()->id,
            'status' => 'pendente'
        ]);
        //        MoneyRequest::create([
        //            'transaction' => $token->generateTransaction(),
        //            'amount' => $request->amount,
        //            'fee' => 0,
        //            'status_user' => 'receptor',
        //            'description' => $request->description,
        //            'user_id' => $client->id,
        //            'client_id' => $request->user()->id
        //        ]);

        UserMoneyRequest::create([
            'user_status' => 'remetente',
            'user_id' => $request->user()->id,
            'fee' => 0,
            'money_request_id' => $response->id,
            'client_id' => $client->id
        ]);

        UserMoneyRequest::create([
            'user_status' => 'receptor',
            'user_id' => $client->id,
            'fee' => 0,
            'money_request_id' => $response->id,
            'client_id' => $request->user()->id
        ]);


        $notification = array(
            'icon' => 'ic_i_mali_cover',
            'title' => 'Pedido ' . $request->amount . ' MT',
            //            'body' => $request->user()->name . ' pediu ' . $request->amount . ' na sua conta ' . $imali->account_number,
            'body' => $request->user()->name . ' pediu ' . $request->amount . ' MT',
            //            'image' => 'http://imali.co.mz/public/images/imali_novo.png',
            'click_action' => 'com.imali.payapp.payment_TARGET_NOTIFICATION',
            'color' => '#008577'
        );

        $data = array(
            'id' => $response->id,
            'client_id' => $client->id,
            'cliente' => $response->user_id,
            'name' => $request->user()->name,
            'amount' => $response->amount,
            'user_id' => $request->user()->id,
            'account_number' => $imali->account_number,
            'phone' => $request->user()->phone,
            'description' => $response->description,
            'status' => $response->status,
            'route' => 'TARGET_NOTIFICATION',
            'createdAt' => $response->created_at,
            'updatedAt' => $response->updated_at,
            'terminal' => 'firebase'
        );

        $this->pushNotifification($client->firebase_token, $notification, $data);

        return response()->json(['message' => 'Pedido de dinheiro enviado com Sucesso', 'transaction' => $response->transaction]);
    }

    public function recusarPedido(Request $request)
    {
        $moneyRequest = MoneyRequest::find($request->id);


        $imali = ImaliAccount::query()
            ->where('user_id', $moneyRequest->user_id)
            ->first();

        if ($moneyRequest) {
            $moneyRequest->update([
                'status' => 'recusado'
            ]);

            $notification = array(
                //                'icon' => 'ic_i_mali_cover',
                'icon' => 'ic_imali_logo_verde_01',
                'title' => 'Pedido Recusado',
                'body' => $request->user()->name . ' recusou o seu pedido de ' . $moneyRequest->amount . ' MT',
                //                'click_action' => 'com.imali.payapp.payment_TARGET_NOTIFICATION',
                'click_action' => 'com.imali.payapp.payment_NOTICIA',
                //                'color' => '#008577'
                'color' => '#fff'
            );


            $data = array(
                'id' => $moneyRequest->id,
                'name' => $request->user()->name,
                'client_id' => $request->client_id,
                'user_id' => $imali->id,
                'amount' => $moneyRequest->amount,
                'account_number' => $imali->account_number,
                'sms' => $request->user()->name . ' recusou o seu pedido de ' . $moneyRequest->amount . ' MT',
                'phone' => $request->user()->phone,
                'description' => $moneyRequest->description,
                'route' => 'NOTICIA',
                'terminal' => 'firebase'
            );


            $clientUser = User::find($moneyRequest->user_id);
            $this->pushNotifification($clientUser->firebase_token, $notification, $data);

            return response()->json(['message' => 'Pedido Recusado com Sucesso '], 200);
        }
    }

    public function pushNotifification($token, $notification = array(), $data = array())
    {
        $apiKey = 'AAAA8zVzEPQ:APA91bHl_DXB6UGb_6gZlmFnaLTQoANtX_OBjvl3nOy2bSlnFhxedvk6EhGj7cZoIvmlbKeCnqGxXbuyMH_rEPuhRXvuitXzo6Pfl2TMXLar1PlifXqEhYq6tS55UMrY2Kffzj-P_UH-';
        $fields = array('to' => $token, 'notification' => $notification, 'data' => $data);
        $headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json');
        $url = 'https://fcm.googleapis.com/fcm/send';

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
        $result = curl_exec($curl);
        curl_close($curl);

        return json_decode($result, true);
    }
}