• File: MoneyRequestController.php
  • Full Path: /var/www/lastworkingimaliapi/app/Http/Controllers/MoneyRequestController.php
  • Date Modified: 10/16/2022 1:09 AM
  • File size: 9.16 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();

        $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')
            ->orderByDesc('money_requests.created_at')
            ->get();


        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
        ]);
//        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,
            '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', $request->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,
                'terminal' => 'firebase'
            );


            $clientUser = User::find($request->client_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);

    }
}