<?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);
}
}