<?php
namespace App\Http\Controllers;
use App\Bank\MasterAccount;
use App\Bank\Payment;
use App\Bank\Profit;
use App\Classes\Kyc;
use App\Classes\FCMNotifcation;
use App\Classes\PaymentKyc;
use App\Classes\Record;
use App\Classes\SendSMS;
use App\Classes\SendSMSSislog;
use App\Classes\SmsManager;
use App\Classes\TransactionGeneration;
use App\Imali\ImaliAccount;
use App\Imali\ImaliAccountConfig;
use App\Imali\MerchantAccount;
use App\Imali\MerchantContract;
use App\Imali\RamoActivity;
use App\Imali\RechargeImaliAccount;
use App\Imali\Transfer;
use App\Mail\Pagamento;
use App\Mail\PagamentoConfirmado;
use App\MoneyRequest;
use App\PurchaseVoucher;
use App\Store;
use App\StoreAmountGeneration;
use App\StoreConfig;
use App\StoreDevice;
use App\TransactionHistory;
use App\TransferHistory;
use App\User;
use Illuminate\Http\Request;
use DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use QRCode;
class PaymentController extends Controller
{
protected $request;
protected $createTransaction;
protected $generatedTransaction;
protected $log;
protected $trasactionGeneration;
protected SmsManager $smsManager;
public function __construct()
{
$this->log = new Record();
$this->trasactionGeneration = new TransactionGeneration();
$this->smsManager = new SmsManager();
}
public function getExtrato()
{
$user = User::query()
->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
->leftJoin('credelecs', 'credelecs.user_id', '=', 'users.id')
->leftJoin('payments', 'payments.sender_id', '=', 'users.id')
->where('users.id', 1)
->select('credelecs.*', 'payments.*')
->get();
return response()->json($user);
}
public function getTesteTransaction($id)
{
$u = Payment::query()->where('sender_id', '=', 1)->get();
$transactons = DB::table('payments')
->join('history_payments', 'history_payments.user_id', '=', 'payments.sender_id')
->where('payments.sender_id', $id)
->where('history_payments.user_id', $id)
->select('payments.*', 'history_payments.status_user as type')
->orderBy('payments.created_at', 'desc')
->get();
return response()->json($transactons);
}
public function getUser($id)
{
$user = User::query()->where('user_id', $id)->first();
return response()->json($user);
}
public function getMyTransactions($id)
{
// $user = User::query()->where('user_id', $id)->first();
$transactons = DB::table('users')
->join('payments', 'users.id', '=', 'payments.sender_id')
->where('user_id', $id)
->select('payments.*')
->orderBy('created_at', 'desc')
->get();
return response()->json(['data' => $transactons], 200, [], JSON_NUMERIC_CHECK);
}
public function makePayment(Request $request)
{
$trasactionGeneration = new TransactionGeneration();
$payerUser = User::query()->where('user_id', $request->user_id)->first();
$comerciante = MerchantAccount::query()->where('account_number', $request->account_number)->first();
$payer_id = $payerUser->id;
$imali = ImaliAccount::query()->where('user_id', $payer_id)->first();
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $comerciante->name,
'details' => $kycCheck,
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
if ($payerUser) {
if ($imali->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $comerciante->name,
'details' => 'Saldo Insuficiente',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402, [], JSON_NUMERIC_CHECK);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $payer_id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $payer_id)->increment('points', $points);
$contractoComerciante = MerchantContract::query()->where('merchant_account_id', $comerciante->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->valor_min;
$valorMax = $contractoComerciante->valor_max;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('merchant_accounts')->where('account_number', $comerciante->account_number)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$transaction = $trasactionGeneration->generateTransaction();
$createTransaction = Payment::create([
'transaction_id' => $transaction,
'sender_id' => $payer_id,
'merchant_account_id' => $comerciante->id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $request->description,
'used_points' => $request->used_points,
'estado' => 'pago',
'estado_color' => '#388E3C',
'created_at' => now(),
'updated_at' => now()
]);
$actualPoints = $imali->points + $points;
$createTransaction->paymentHistoric()->create([
'sender_account' => $imali->account_number,
'sender_name' => $payerUser->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $payerUser->id,
'actual_points' => $actualPoints,
'last_points' => $imali->points,
'win_points' => $points,
'transaction_id' => $transaction
]);
$saveProfit = $createTransaction->profit()->create([
'payer_id' => $payer_id,
'payer_account' => $comerciante->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $trasactionGeneration->generateTransaction(),
'payment_id' => $createTransaction->id,
]);
if ($saveProfit) {
$sms = new SendSMS();
$sms->sendMessageToClientePayment($createTransaction);
$sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
Mail::to($comerciante->email_loja)->send(new PagamentoConfirmado($createTransaction));
Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $comerciante->name,
'details' => 'Pagamento Feito com Sucesso',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Pagamento Feito com Sucesso!',
'transaction' => $transaction,
'created_at' => $createTransaction->created_at,
'duration' => 3000
], 200);
}
}
}
}
}
public function makePaymentStoreNEW(Request $request)
{
DB::transaction(function ($request) {
$user = User::find($request->user()->id);
// $user = DB::table('users')->
if (Hash::check($request->pin, $user->pin)) {
$trasactionGeneration = new TransactionGeneration();
$payerUser = User::query()->where('user_id', $request->user()->user_id)->first();
$store = Store::query()->where('account_number', $request->account_number)->first();
$payer_id = $payerUser->id;
$imali = ImaliAccount::query()->where('user_id', $payer_id)->first();
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => $kycCheck,
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
if ($payerUser) {
if ($imali->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Saldo Insuficiente',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402, [], JSON_NUMERIC_CHECK);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $payer_id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $payer_id)->increment('points', $points);
$contractoComerciante = MerchantContract::query()->where('store_id', $store->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->min_amount;
$valorMax = $contractoComerciante->max_amount;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('stores')->where('account_number', $store->account_number)->increment('balance', $valorFinal);
$storeT = Store::query()->where('account_number', $store->account_number)->first();
DB::table('merchant_accounts')->where('id', $storeT->merchant_account_id)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$transaction = $trasactionGeneration->generateTransaction();
$createTransaction = Payment::create([
'transaction_id' => $transaction,
'sender_id' => $payer_id,
'store_id' => $store->id,
'client_id' => $request->user_client_id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $request->description,
'used_points' => $request->used_points,
'estado' => 'pago',
'payment_type' => 'payment',
'estado_color' => '#388E3C',
'created_at' => now(),
'updated_at' => now(),
'category_id' => $store->industry_activity
]);
// TransactionHistory::create([
// 'user_id' => $request->user()->id,
// 'payment_id' => $createTransaction->id,
// 'category_id' => $createTransaction->category_id,
// 'transaction_type' => 'payment'
// ]);
$actualPoints = $imali->points + $points;
$re = $createTransaction->paymentHistoric()->create([
'sender_account' => $imali->account_number,
'sender_name' => $payerUser->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $payerUser->id,
'actual_points' => $actualPoints,
'last_points' => $imali->points,
'win_points' => $points,
'transaction_id' => $transaction,
'category_id' => $store->industry_activity
]);
$saveProfit = $createTransaction->profit()->create([
'payer_id' => $payer_id,
'payer_account' => $store->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $trasactionGeneration->generateTransaction(),
'payment_id' => $createTransaction->id,
'profit_payer_id' => $createTransaction->store_id
]);
if ($saveProfit) {
$this->smsManager->sendSMSToComerciante($createTransaction);
// $sms = new SendSMS();
// $sms->sendMessageToClientePayment($createTransaction);
// $sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
// Mail::to($store->email)->send(new PagamentoConfirmado($createTransaction));
// Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
$generate = StoreAmountGeneration::query()
->where('id', $request->store_amount_generation_id)
->first();
if ($generate) {
$generate->update([
'status' => 'sucesso'
]);
}
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Pagamento Feito com Sucesso',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Success',
'user_id' => $request->user()->id
]);
$notification = array(
'icon' => 'ic_imali_logo_verde_01',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Pagemento ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' fez o pagamento de ' . $request->amount . ' MT ' . ' na loja ' . $store->name,
'click_action' => 'com.imali.payapp.payment_PAGAR_NOTIFICATION',
// 'color' => '#008577'
'color' => '#ffffff'
);
$data = array(
'transaction' => $createTransaction->transaction_id,
'loja' => $store->name,
'loja_account' => $store->account_number,
'pontos' => $createTransaction->received_points,
'pontos_usados' => $createTransaction->used_points,
'amount' => $createTransaction->amount,
'amount_debited' => $createTransaction->amount_credited,
'account_number' => $imali->account_number,
'phone' => $request->user()->phone,
'descricao' => $createTransaction->description,
'data' => $createTransaction->created_at,
'estado' => $createTransaction->estado,
'comissao' => $createTransaction->comissao,
'terminal' => 'firebase'
);
$this->pushNotifification($user->firebase_token, $notification, $data);
return response()->json(['message' => 'Pagamento Feito com Sucesso!',
'transaction' => $transaction,
'created_at' => $createTransaction->created_at,
'duration' => 3000
], 200);
}
}
}
}
} else {
return response()->json(['message' => 'Pin Incorrecto'], 400);
}
});
}
public function makePaymentStoreAppNew(Request $request)
{
$this->validate($request, [
'account_number' => 'required',
'amount' => 'required',
'description' => 'required'
]);
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => "Payment Fail",
'details' => $kycCheck,
'operation' => 'Payment',
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
$this->request = $request;
DB::transaction(function () {
$store = DB::table('stores')->where('account_number', $this->request->account_number)->first();
$imaliAccount = DB::table('users')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
->where('users.user_id', $this->request->user()->user_id)
->select('users.*', 'imali_accounts.account_number', 'imali_accounts.points')
->first();
$valorAPagar = $this->request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $imaliAccount->id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $imaliAccount->id)->increment('points', $points);
// $contractoComerciante = MerchantContract::query()->where('store_id', '=', $store->id)->first();
$contractoComerciante = DB::table('merchant_contracts')->where('store_id', '=', $store->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->min_amount;
$valorMax = $contractoComerciante->max_amount;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('stores')->where('account_number', $store->account_number)->increment('balance', $valorFinal);
// Add Money to Merchant
// $storeT = Store::query()->where('account_number', $store->account_number)->first();
// DB::table('merchant_accounts')->where('id', $storeT->merchant_account_id)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$this->generatedTransaction = $this->trasactionGeneration->generateTransaction();
$getPayment = DB::table('payments')->where('transaction_id', $this->request->transaction)->first();
if ($getPayment) {
DB::table('payments')
->where('transaction_id', $this->request->transaction)
->update([
'received_points' => $points,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $this->request->description,
'used_points' => $this->request->used_points,
'estado' => 'success',
'status' => 'success',
'payment_type' => 'directo',
'estado_color' => '#388E3C',
'sender_id' => $imaliAccount->id,
'updated_at' => now(),
]);
$this->createTransaction = DB::table('payments')->where('transaction_id', $this->request->transaction)->first();
} else {
DB::table('payments')->insert([
'transaction_id' => $this->generatedTransaction,
'sender_id' => $imaliAccount->id,
'store_id' => $store->id,
'client_id' => $this->request->user_client_id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $this->request->description,
'used_points' => $this->request->used_points,
'estado' => 'success',
'status' => 'success',
'payment_type' => 'directo',
'estado_color' => '#388E3C',
'created_at' => now(),
'updated_at' => now(),
'category_id' => $store->industry_activity
]);
$this->createTransaction = DB::table('payments')->where('transaction_id', $this->generatedTransaction)->first();
}
DB::table('transaction_histories')->insert([
'user_id' => $this->request->user()->id,
'payment_id' => $this->createTransaction->id,
'category_id' => $this->createTransaction->category_id,
'transaction_type' => 'payment',
'created_at' => now(),
'updated_at' => now()
]);
$actualPoints = $imaliAccount->points + $points;
DB::table('history_payments')->insert([
'sender_account' => $imaliAccount->account_number,
'sender_name' => $imaliAccount->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $imaliAccount->id,
'actual_points' => $actualPoints,
'last_points' => $imaliAccount->points,
'win_points' => $points,
'transaction_id' => $this->generatedTransaction,
'category_id' => $store->industry_activity,
'payment_id' => $this->createTransaction->id,
'created_at' => now(),
'updated_at' => now()
]);
DB::table('profits')->insert([
'payer_id' => $imaliAccount->id,
'payer_account' => $store->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $this->trasactionGeneration->generateTransaction(),
'payment_id' => $this->createTransaction->id,
'profit_payer_id' => $this->createTransaction->store_id,
'created_at' => now(),
'updated_at' => now()
]);
DB::table('logs')->insert([
'description' => $imaliAccount->account_number . ' ' . $store->name,
'details' => trans('payment_done'),
'operation' => 'Payment',
'properties' => json_encode($this->request->except(['pin'])),
'status' => 'success',
'user_id' => $this->request->user()->id
]);
$notification = array(
// 'icon' => 'ic_imali_logo_verde_01',
'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $this->request->amount . ' MT',
'body' => 'Parabéns, ' . ' fez o pagamento de ' . $this->request->amount . ' MT ' . ' na loja ' . $store->name,
'click_action' => 'com.imali.payapp.payment_PAGAR_NOTIFICATION',
'color' => '#ffffff'
);
$notificationStore = array(
'icon' => 'ic_imali_logo_verde_01',
'image' => 'https://imali.co.mz/wp-content/uploads/2022/04/iMali-Business-Logo.png',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $this->request->amount . ' MT',
'body' => 'Parabéns, ' . ' recebeu o pagamento de ' . $this->request->amount . ' MT ' . ' do cliente ' . $imaliAccount->name,
'click_action' => 'mz.co.imali.business.payment_TARGET_NOTIFICATION',
'color' => '#ffffff'
);
$store = DB::table('stores')->where('account_number', $this->request->account_number)->first();
$category = RamoActivity::find($store->industry_activity);
$data = array(
'transaction' => $this->createTransaction->transaction_id,
'loja' => $store->name,
'name' => $imaliAccount->name,
'loja_account' => $store->account_number,
'pontos' => $this->createTransaction->received_points,
'pontos_usados' => $this->createTransaction->used_points,
'amount' => $this->createTransaction->amount,
'amount_debited' => $this->createTransaction->amount_credited,
'amount_credited' => $this->createTransaction->amount_credited,
'account_number' => $imaliAccount->account_number,
'phone' => $this->request->user()->phone,
'descricao' => $this->createTransaction->description,
'data' => $this->createTransaction->created_at,
'created_at' => $this->createTransaction->created_at,
'estado' => $this->createTransaction->estado,
'comissao' => $this->createTransaction->comissao,
'message_store' => trans('payment_received'),
'message_customer' => trans('payment_done'),
'logo_category' => $category->logo,
'category' => $category->nome,
'terminal' => 'firebase'
);
// Notifify customer
$this->pushNotifification($imaliAccount->firebase_token, $notification, $data);
$storeConfig = StoreConfig::query()
->where('store_id', '=', $store->id)
->first();
if ($storeConfig) {
if ($storeConfig->notify === 1) {
// NOTIFY STORE BY SMS
if ($storeConfig->notify_sms === 1) {
$sms = new SendSMSSislog();
$data = array(
"sender_id" => $this->createTransaction->sender_id,
"store_id" => $this->createTransaction->store_id,
"transaction_id" => $this->createTransaction->transaction_id,
"created_at" => $this->createTransaction->created_at,
"amount" => $this->createTransaction->amount,
);
$this->smsManager->sendSMSToComerciante($data);
}
if ($storeConfig->notify_email == 1) {
}
// NOTIFY STORE
if ($storeConfig->notify_push == 1) {
if ($getPayment) {
$this->pushNotifification($getPayment->firebase_token, $notificationStore, $data);
} else {
$device = StoreDevice::query()
->where('store_id', $store->id)
->where('status', '=', 1)
->get();
foreach ($device as $d) {
$this->pushNotifification($d->firebase_token, $notificationStore, $data);
}
}
}
}
}
}, 2);
return response()->json([
'message' => trans('payment_done'),
'transaction' => $this->generatedTransaction,
'created_at' => $this->createTransaction->created_at,
'duration' => 3000,
]);
}
}
public function makePaymentStore(Request $request)
{
$user = User::find($request->user()->id);
if (Hash::check($request->pin, $user->pin)) {
$trasactionGeneration = new TransactionGeneration();
$payerUser = User::query()->where('user_id', '=', $request->user()->user_id)->first();
$store = Store::query()->where('account_number', '=', $request->account_number)->first();
$payer_id = $payerUser->id;
$imali = ImaliAccount::query()->where('user_id', '=', $payer_id)->first();
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => $kycCheck,
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
if ($payerUser) {
if ($imali->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Saldo Insuficiente',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402, [], JSON_NUMERIC_CHECK);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $payer_id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $payer_id)->increment('points', $points);
$contractoComerciante = MerchantContract::query()->where('store_id', '=', $store->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->min_amount;
$valorMax = $contractoComerciante->max_amount;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('stores')->where('account_number', $store->account_number)->increment('balance', $valorFinal);
// Add Money to Merchant
// $storeT = Store::query()->where('account_number', $store->account_number)->first();
// DB::table('merchant_accounts')->where('id', $storeT->merchant_account_id)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$transaction = $trasactionGeneration->generateTransaction();
$createTransaction = Payment::create([
'transaction_id' => $transaction,
'sender_id' => $payer_id,
'store_id' => $store->id,
'client_id' => $request->user_client_id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $request->description,
'used_points' => $request->used_points,
'estado' => 'pago',
'payment_type' => 'directo',
'estado_color' => '#388E3C',
'created_at' => now(),
'updated_at' => now(),
'category_id' => $store->industry_activity
]);
TransactionHistory::create([
'user_id' => $request->user()->id,
'payment_id' => $createTransaction->id,
'category_id' => $createTransaction->category_id,
'transaction_type' => 'payment'
]);
$actualPoints = $imali->points + $points;
$re = $createTransaction->paymentHistoric()->create([
'sender_account' => $imali->account_number,
'sender_name' => $payerUser->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $payerUser->id,
'actual_points' => $actualPoints,
'last_points' => $imali->points,
'win_points' => $points,
'transaction_id' => $transaction,
'category_id' => $store->industry_activity
]);
// TransactionHistory::create([
// 'user_id' => $re->user_id,
// 'payment_id' => $re->id,
// 'category_id' => $re->category_id,
// 'transaction_type' => 'payment'
// ]);
$saveProfit = $createTransaction->profit()->create([
'payer_id' => $payer_id,
'payer_account' => $store->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $trasactionGeneration->generateTransaction(),
'payment_id' => $createTransaction->id,
'profit_payer_id' => $createTransaction->store_id
]);
if ($saveProfit) {
$generate = StoreAmountGeneration::query()
->where('id', '=', $request->store_amount_generation_id)
->first();
if ($generate) {
$generate->update([
'status' => 'sucesso',
'payment_id' => $createTransaction->id
]);
$createTransaction->update([
'store_amount_generation_id' => $generate->id
]);
}
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Pagamento Feito com Sucesso',
'operation' => 'Payment',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Success',
'user_id' => $request->user()->id
]);
$notification = array(
// 'icon' => 'ic_imali_logo_verde_01',
'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' fez o pagamento de ' . $request->amount . ' MT ' . ' na loja ' . $store->name,
'click_action' => 'com.imali.payapp.payment_PAGAR_NOTIFICATION',
// 'color' => '#008577'
'color' => '#ffffff'
);
$notificationStore = array(
'icon' => 'ic_imali_logo_verde_01',
// 'image' => 'https://paytek-africa.com/image/logo.png',
'image' => 'https://imali.co.mz/wp-content/uploads/2022/04/iMali-Business-Logo.png',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' recebeu o pagamento de ' . $request->amount . ' MT ' . ' do cliente ' . $user->name,
'click_action' => 'mz.co.imali.business.payment_TARGET_NOTIFICATION',
// 'color' => '#008577'
'color' => '#ffffff'
);
$store = Store::query()->where('account_number', $request->account_number)->first();
$category = RamoActivity::find($store->industry_activity);
$data = array(
'transaction' => $createTransaction->transaction_id,
'loja' => $store->name,
'name' => $user->name,
'loja_account' => $store->account_number,
'pontos' => $createTransaction->received_points,
'pontos_usados' => $createTransaction->used_points,
'amount' => $createTransaction->amount,
'amount_debited' => $createTransaction->amount_credited,
'amount_credited' => $createTransaction->amount_credited,
'account_number' => $imali->account_number,
'phone' => $request->user()->phone,
'descricao' => $createTransaction->description,
'data' => $createTransaction->created_at,
'created_at' => $createTransaction->created_at,
'estado' => $createTransaction->estado,
'comissao' => $createTransaction->comissao,
'message_store' => 'Pagamento Recebido Com Sucesso',
'message_customer' => 'Pagamento Efectuado Com Sucesso',
'logo_category' => $category->logo,
'category' => $category->nome,
'terminal' => 'firebase'
);
// Notifify customer
$this->pushNotifification($user->firebase_token, $notification, $data);
$storeConfig = StoreConfig::query()
->where('store_id', '=', $store->id)
// ->where('store_id', '=', $createTransaction->store_id)
->first();
if ($storeConfig) {
if ($storeConfig->notify === 1) {
// NOTIFICAR POR SMS
if ($storeConfig->notify_sms === 1) {
// $sms = new SendSMS();
// $sms->sendMessageToClientePayment($createTransaction);
// $sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
$this->smsManager->sendSMSToComerciante($createTransaction);
}
if ($storeConfig->notify_email == 1) {
// Mail::to($store->email)->send(new PagamentoConfirmado($createTransaction));
// Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
}
// NOTIFY STORE
if ($storeConfig->notify_push == 1) {
if ($generate) {
$this->pushNotifification($generate->firebase_token, $notificationStore, $data);
} else {
$device = StoreDevice::query()
->where('store_id', $store->id)
->where('status', '=', 1)
->get();
foreach ($device as $d) {
$this->pushNotifification($d->firebase_token, $notificationStore, $data);
}
}
}
}
}
return response()->json(['message' => 'Pagamento Efectuado com Sucesso!',
'transaction' => $transaction,
'created_at' => $createTransaction->created_at,
'duration' => 3000
], 200);
}
}
}
}
} else {
return response()->json(['message' => 'Pin Incorrecto'], 400);
}
}
public function makePaymentStore2NEW(Request $request)
{
DB::transaction(function ($request) {
$trasactionGeneration = new TransactionGeneration();
$payerUser = User::query()->where('user_id', $request->user()->user_id)->first();
$store = Store::query()->where('account_number', $request->account_number)->first();
$payer_id = $payerUser->id;
$imali = ImaliAccount::query()->where('user_id', $payer_id)->first();
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => $kycCheck,
'operation' => 'Payment',
'status' => 'Error',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
if ($payerUser) {
if ($imali->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Saldo Insuficiente',
'operation' => 'Payment',
'status' => 'Error',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402, [], JSON_NUMERIC_CHECK);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $payer_id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $payer_id)->increment('points', $points);
$contractoComerciante = MerchantContract::query()->where('store_id', $store->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->min_amount;
$valorMax = $contractoComerciante->max_amount;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('stores')->where('account_number', $store->account_number)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$transaction = $trasactionGeneration->generateTransaction();
$createTransaction = Payment::create([
'transaction_id' => $transaction,
'sender_id' => $payer_id,
'store_id' => $store->id,
'client_id' => $request->user_client_id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $request->description,
'used_points' => $request->used_points,
'estado' => 'pago',
'estado_color' => '#388E3C',
'created_at' => now(),
'updated_at' => now(),
'category_id' => $store->industry_activity
]);
// TransactionHistory::create([
// 'user_id' => $request->user()->id,
// 'payment_id' => $createTransaction->id,
// 'category_id' => $createTransaction->category_id,
// 'transaction_type' => 'payment'
// ]);
$actualPoints = $imali->points + $points;
$res = $createTransaction->paymentHistoric()->create([
'sender_account' => $imali->account_number,
'sender_name' => $payerUser->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $payerUser->id,
'actual_points' => $actualPoints,
'last_points' => $imali->points,
'win_points' => $points,
'transaction_id' => $transaction,
'category_id' => $createTransaction->category_id
]);
// TransactionHistory::create([
// 'user_id' => $res->user_id,
// 'payment_id' => $res->id,
// 'category_id' => $res->category_id,
// 'transaction_type' => 'payment'
// ]);
$saveProfit = $createTransaction->profit()->create([
'payer_id' => $payer_id,
'payer_account' => $store->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $trasactionGeneration->generateTransaction(),
'payment_id' => $createTransaction->id,
]);
if ($saveProfit) {
$this->smsManager->sendSMSToComerciante($createTransaction);
// $sms = new SendSMS();
// $sms->sendMessageToClientePayment($createTransaction);
// $sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
// Mail::to($store->email)->send(new PagamentoConfirmado($createTransaction));
// Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
$generate = StoreAmountGeneration::query()
->where('id', $request->store_amount_generation_id)
->first();
if ($generate) {
$generate->update([
'status' => 'sucesso'
]);
}
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Pagamento Feito com Sucesso',
'operation' => 'Payment',
'status' => 'Success',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Pagamento Feito com Sucesso!',
'transaction' => $transaction,
'created_at' => $createTransaction->created_at,
'duration' => 3000
], 200);
}
}
}
}
});
}
public function makePaymentStore2(Request $request)
{
$trasactionGeneration = new TransactionGeneration();
// $payerUser = User::query()->where('user_id', $request->user_id)->first();
$payerUser = User::query()->where('user_id', '=', $request->user()->user_id)->first();
$user = User::find($request->user()->id);
// $comerciante = MerchantAccount::query()->where('account_number', $request->account_number)->first();
$store = Store::query()->where('account_number', '=', $request->account_number)->first();
$payer_id = $payerUser->id;
$imali = ImaliAccount::query()->where('user_id', $payer_id)->first();
$kyc = new Kyc();
$kycCheck = $kyc->checkSenderPayment($request);
if ($kycCheck) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => $kycCheck,
'operation' => 'Payment',
'status' => 'Error',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
return $kycCheck;
} else {
if ($payerUser) {
if ($imali->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Saldo Insuficiente',
'operation' => 'Payment',
'status' => 'Error',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402, [], JSON_NUMERIC_CHECK);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $payer_id)->decrement('balance', $valorAPagar);
DB::table('imali_accounts')->where('user_id', $payer_id)->increment('points', $points);
$contractoComerciante = MerchantContract::query()->where('store_id', $store->id)->first();
$taxaDesconto = $valorAPagar * ($contractoComerciante->taxa) / 100;
$valorMin = $contractoComerciante->min_amount;
$valorMax = $contractoComerciante->max_amount;
if ($taxaDesconto < $valorMin) {
$taxaDesconto = $valorMin;
}
if ($taxaDesconto > $valorMax) {
$taxaDesconto = $valorMax;
}
// $valorFinal = $valorAPagar - $valorAPagar*($contractoComerciante->taxa)/100;
$valorFinal = $valorAPagar - $taxaDesconto;
// Recever User Merchante
DB::table('stores')->where('account_number', $store->account_number)->increment('balance', $valorFinal);
// Add Money to Merchant
// $storeT = Store::query()->where('account_number', $store->account_number)->first();
// DB::table('merchant_accounts')->where('id', $storeT->merchant_account_id)->increment('balance', $valorFinal);
// $profit = $valorAPagar*($contractoComerciante->taxa)/100;
$transaction = $trasactionGeneration->generateTransaction();
$createTransaction = Payment::create([
'transaction_id' => $transaction,
'sender_id' => $payer_id,
'store_id' => $store->id,
'client_id' => $request->user_client_id,
'received_points' => $points,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'description' => $request->description,
'used_points' => $request->used_points,
'estado' => 'pago',
'estado_color' => '#388E3C',
'payment_type' => 'directo',
'created_at' => now(),
'updated_at' => now(),
'category_id' => $store->industry_activity
]);
TransactionHistory::create([
'user_id' => $request->user()->id,
'payment_id' => $createTransaction->id,
'category_id' => $createTransaction->category_id,
'transaction_type' => 'payment'
]);
$actualPoints = $imali->points + $points;
$res = $createTransaction->paymentHistoric()->create([
'sender_account' => $imali->account_number,
'sender_name' => $payerUser->name,
'amount_credited' => $valorFinal,
'status_user' => 'sender',
'status' => 'done',
'comissao' => $taxaDesconto,
'amount' => $valorAPagar,
'user_id' => $payerUser->id,
'actual_points' => $actualPoints,
'last_points' => $imali->points,
'win_points' => $points,
'transaction_id' => $transaction,
'category_id' => $createTransaction->category_id
]);
TransactionHistory::create([
'user_id' => $res->user_id,
'payment_id' => $res->id,
'category_id' => $res->category_id,
'transaction_type' => 'payment'
]);
$saveProfit = $createTransaction->profit()->create([
'payer_id' => $payer_id,
'payer_account' => $store->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorFinal,
'comissao' => $taxaDesconto,
'profit_id' => $trasactionGeneration->generateTransaction(),
'payment_id' => $createTransaction->id,
]);
if ($saveProfit) {
// $sms = new SendSMSSislog();
// $sms->sendSMSToComerciante($createTransaction);
// $sms = new SendSMS();
// $sms->sendMessageToClientePayment($createTransaction);
// $sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
// Mail::to($store->email)->send(new PagamentoConfirmado($createTransaction));
// Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
$generate = StoreAmountGeneration::query()
->where('id', $request->store_amount_generation_id)
->first();
if ($generate) {
$generate->update([
'status' => 'sucesso',
'payment_id' => $createTransaction->id
]);
$createTransaction->update([
'store_amount_generation_id' => $generate->id
]);
}
$log = new Record();
$log->createLog([
'description' => $imali->account_number . ' ' . $store->name,
'details' => 'Pagamento Feito com Sucesso',
'operation' => 'Payment',
'status' => 'Success',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
$notification = array(
// 'icon' => 'ic_imali_logo_verde_01',
'icon' => 'ic_i_mali_cover',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' fez o pagamento de ' . $request->amount . ' MT ' . ' na loja ' . $store->name,
'click_action' => 'com.imali.payapp.payment_PAGAR_NOTIFICATION',
// 'color' => '#008577'
'color' => '#ffffff'
);
$notificationStore = array(
'icon' => 'ic_imali_logo_verde_01',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Pagamento ' . $request->amount . ' MT',
// 'image' => 'https://paytek-africa.com/image/logo.png',
'image' => 'https://imali.co.mz/wp-content/uploads/2022/04/iMali-Business-Logo.png',
'body' => 'Parabéns, ' . ' recebeu o pagamento de ' . $request->amount . ' MT ' . ' do cliente ' . $user->name,
'click_action' => 'mz.co.imali.business.payment_TARGET_NOTIFICATION',
// 'color' => '#008577'
'color' => '#ffffff'
);
$store = Store::query()->where('account_number', $request->account_number)->first();
$category = RamoActivity::find($store->industry_activity);
$data = array(
'transaction' => $createTransaction->transaction_id,
'loja' => $store->name,
'name' => $user->name,
'loja_account' => $store->account_number,
'pontos' => $createTransaction->received_points,
'pontos_usados' => $createTransaction->used_points,
'amount' => $createTransaction->amount,
'amount_debited' => $createTransaction->amount_credited,
'amount_credited' => $createTransaction->amount_credited,
'account_number' => $imali->account_number,
'phone' => $request->user()->phone,
'descricao' => $createTransaction->description,
'data' => $createTransaction->created_at,
'created_at' => $createTransaction->created_at,
'estado' => $createTransaction->estado,
'comissao' => $createTransaction->comissao,
'message_store' => 'Pagamento Recebido Com Sucesso',
'message_customer' => 'Pagamento Efectuado Com Sucesso',
'logo_category' => $category->logo,
'category' => $category->nome,
'terminal' => 'firebase'
);
// $this->pushNotifification($user->firebase_token, $notification, $data);
//
// if ($generate) {
// $this->pushNotifification($generate->firebase_token, $notificationStore, $data);
// }
//
// $device = StoreDevice::query()
// ->where('store_id', $store->id)
// ->where('status', '=', 1)
// ->get();
//
// foreach ($device as $d) {
// $this->pushNotifification($d->firebase_token, $notificationStore, $data);
// }
// NOTIFY CUSTOMER
$this->pushNotifification($user->firebase_token, $notification, $data);
$storeConfig = StoreConfig::query()
->where('store_id', '=', $store->id)
->first();
if ($storeConfig) {
if ($storeConfig->notify == 1) {
// NOTIFICAR POR SMS
if ($storeConfig->notify_sms == 1) {
// $sms = new SendSMS();
// $sms->sendMessageToClientePayment($createTransaction);
// $sms->sendMessageToComerciante($createTransaction);
// $sms->sendMessageToClientePayment($payerUser);
$this->smsManager->sendSMSToComerciante($createTransaction);
}
if ($storeConfig->notify_email == 1) {
// Mail::to($store->email)->send(new PagamentoConfirmado($createTransaction));
// Mail::to($payerUser->email)->send(new Pagamento($createTransaction));
}
if ($storeConfig->notify_push == 1) {
if ($generate) {
$this->pushNotifification($generate->firebase_token, $notificationStore, $data);
} else {
$device = StoreDevice::query()
->where('store_id', $store->id)
->where('status', '=', 1)
->get();
foreach ($device as $d) {
$this->pushNotifification($d->firebase_token, $notificationStore, $data);
}
}
}
}
}
return response()->json(['message' => 'Pagamento Feito com Sucesso!',
'transaction' => $transaction,
'created_at' => $createTransaction->created_at,
'duration' => 3000
], 200);
}
}
}
}
}
public function transferMoney(Request $request)
{
$user = User::find($request->user()->id);
if (Hash::check($request->pin, $user->pin)) {
$random = new TransactionGeneration();
$senderUser = User::query()->where('user_id', $request->user()->user_id)->first();
$sender_id = $senderUser->id;
$imaliAccountSender = ImaliAccount::query()->where('user_id', $senderUser->id)->first();
$imaliAccountReceiver = ImaliAccount::query()->where('account_number', $request->account_number)->first();
$imaliAccountReceiverCount = ImaliAccount::query()->where('account_number', $request->account_number)->count();
$kyc = ImaliAccount::query()
->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
->where('user_id', $senderUser->id)
->select('imali_account_configs.*')
->first();
$payments = Payment::query()
->where(['sender_id' => $senderUser->id])
->whereDate('created_at', date('Y-m-d'))
->get();
// $recevier = User::query()->where('id', $imaliAccountReceiver->user_id)->count();
if ($imaliAccountReceiverCount > 0) {
$recevier = User::query()->where('id', $imaliAccountReceiver->user_id)->first();
$kyc = new Kyc();
$request->request->add(['id' => $senderUser->id, 'receiver_id' => $recevier->id]);
$result = $kyc->checkSender($request);
if ($result) {
$log = new Record();
$log->createLog([
'description' => 'Transfer Money',
'details' => $result,
'operation' => 'Transfer Money',
'status' => 'Error',
'origin_ip' => $request->ip(),
'properties' => json_encode($request->except(['pin'])),
// 'properties' => json_encode($request->all()),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return $result;
} else {
if ($imaliAccountSender) {
if ($imaliAccountReceiver->user_id === $imaliAccountSender->user_id) {
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccountSender->account_number,
// 'details' => 'Não pode Transferir para Si mesmo' . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
// 'operation' => 'Transfer Money',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
$log = new Record();
$log->createLog([
'description' => 'Não pode Transferir para Si mesmo',
'details' => 'Não pode Transferir para Si mesmo',
'operation' => 'Transfer Money',
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Não pode Transferir para si mesmo!', 'class' => 'error'], 400);
} elseif ($imaliAccountSender->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => 'Saldo insuficiente',
'details' => 'Saldo Insuficiente',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
$imaliAccountConfig = ImaliAccountConfig::find(1);
// $valorTaxadoTotal = $valorAPagar + $valorAPagar*($imaliAccountConfig->taxa)/100;
$valorTaxadoTotal = $valorAPagar + $imaliAccountConfig->taxa;
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $sender_id)->decrement('balance', $valorTaxadoTotal);
// Recever User
DB::table('imali_accounts')->where('account_number', $imaliAccountReceiver->account_number)->increment('balance', $valorAPagar);
// $profit = $valorAPagar*$valorAPagar*($imaliAccountConfig->taxa)/100;
$profit = $imaliAccountConfig->taxa;
$transactionReference = $random->generateTransaction();
$transferencia = Transfer::create([
'transaction_id' => $transactionReference,
'sender_id' => $sender_id,
'reciever_id' => $recevier->id,
'reciever_name' => $recevier->name,
'reciever_account' => $imaliAccountReceiver->account_number,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => $profit,
'estado_color' => '#388E3C',
'estado' => 'Pago',
'amount_debited' => $valorTaxadoTotal,
'created_at' => now(),
'updated_at' => now(),
'category_id' => 22
]);
TransactionHistory::create([
'user_id' => $transferencia->sender_id,
'transfer_id' => $transferencia->id,
'category_id' => $transferencia->category_id,
'transaction_type' => 'transfer'
]);
$senderHistory = TransferHistory::create([
'transaction_id' => $transactionReference,
'user_id' => $senderUser->id,
// 'account_number' =>$imaliAccountReceiver->account_number,
'client_id' => $recevier->id,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => $profit,
'estado_color' => '#388E3C',
'estado' => 'Pago',
'user_status' => 'payer',
'amount_debited' => $valorTaxadoTotal,
'created_at' => now(),
'updated_at' => now(),
'category_id' => $transferencia->category_id
]);
TransactionHistory::create([
'user_id' => $senderHistory->user_id,
'transfer_history_id' => $senderHistory->id,
'category_id' => $senderHistory->category_id,
'transaction_type' => 'transfer_history'
]);
$receiverHistory = TransferHistory::create([
'transaction_id' => $transactionReference,
'user_id' => $recevier->id,
// 'account_number' =>$imaliAccountSender->account_number,
'client_id' => $senderUser->id,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => 0,
'estado_color' => '#388E3C',
'estado' => 'Recebido',
'user_status' => 'receiver',
'amount_debited' => 0,
'created_at' => now(),
'updated_at' => now(),
'category_id' => $transferencia->category_id
]);
TransactionHistory::create([
'user_id' => $receiverHistory->user_id,
'transfer_history_id' => $receiverHistory->id,
'category_id' => $receiverHistory->category_id,
'transaction_type' => 'transfer_history'
]);
// $transferencia->paymentHistoric()->create([
// 'sender_account' =>$imaliAccountSender->account_number,
// 'sender_name' => $senderUser->name,
// 'amount_credited' => $valorTaxadoTotal,
// 'status_user' => 'reciever',
// 'status' => 'done',
// 'comissao' => $profit,
// 'amount' =>$valorAPagar,
// 'sender_id' => $senderUser->id,
// 'user_id' => $recevier->id,
// 'actual_points' =>$recevier->points,
// 'last_points' =>$recevier->points,
// 'win_points' => 0,
// 'transaction_id' =>$transferencia->transaction_id
// ]);
$saveProfit = $transferencia->profit()->create([
'payer_id' => $senderUser->id,
'payer_account' => $imaliAccountSender->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorTaxadoTotal,
'comissao' => $profit,
'profit_id' => $transactionReference,
'payment_id' => $transferencia->id,
'transfer_id' => $request->user()->id
]);
// $sms = new SendSMS();
// $sms->sendSMSTransferSender($transferencia);
// $sms->sendSMSTranferReceiver($transferencia);
$recevier2 = User::query()->where('id', $imaliAccountReceiver->user_id)->first();
$notification = array(
// 'icon' => 'ic_i_mali_cover',
'icon' => 'ic_imali_logo_verde_01',
'title' => 'Recebeste ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' recebeste ' . $request->amount . ' MT ' . ' do ' . $request->user()->name,
'click_action' => 'com.imali.payapp.payment_TRANSFER_DETAILS',
// 'color' => '#008577'
'color' => '#ffffff'
);
$data = array(
'transaction' => $receiverHistory->transaction_id,
'name' => $request->user()->name,
'amount' => (double)$senderHistory->amount,
'amount_debited' => (double)$receiverHistory->amount_debited,
// 'amount_credited' => (double)$receiverHistory->amount_credited,
'account_number' => (int)$imaliAccountSender->account_number,
'phone' => $request->user()->phone,
'description' => $request->description,
'data' => $receiverHistory->created_at,
'estado' => $receiverHistory->estado,
'comissao' => (double)$receiverHistory->comissao,
'terminal' => 'firebase'
);
$this->pushNotifification($recevier2->firebase_token, $notification, $data);
if ($request->id_request != 0) {
$moneyR = MoneyRequest::query()->where('id', $request->id_request)->first();
if ($moneyR) {
$moneyR->update([
'status' => 'sucesso'
]);
}
}
if ($saveProfit) {
$log = new Record();
$log->createLog([
'description' => 'SenderAccount: ' . $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => 'Transferência feita com Sucesso',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Success',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json([
'message' => 'Transferência Feita com Sucesso!',
'transaction' => $transactionReference,
'created_at' => $transferencia->created_at
], 200);
}
}
}
}
} else {
$log = new Record();
$log->createLog([
'description' => 'SenderAccount: ' . $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => 'Conta i.Mali inválida',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Conta i.Mali inválida', 'class' => 'error'], 404);
}
} else {
return response()->json(['message' => 'Pin Incorrecto'], 400);
}
}
public function transferMoney2(Request $request)
{
// return $request->fullUrl();
// return $test;
// return $request->header();
// return $request->fullUrl();
// return $request->url();
// return Request::ip();
// return $request->ip();
$random = new TransactionGeneration();
$senderUser = User::query()->where('user_id', $request->user()->user_id)->first();
$sender_id = $senderUser->id;
$imaliAccountSender = ImaliAccount::query()->where('user_id', $senderUser->id)->first();
$imaliAccountReceiver = ImaliAccount::query()->where('account_number', $request->account_number)->first();
$imaliAccountReceiverCount = ImaliAccount::query()->where('account_number', $request->account_number)->count();
$kyc = ImaliAccount::query()
->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
->where('user_id', $senderUser->id)
->select('imali_account_configs.*')
->first();
$payments = Payment::query()
->where(['sender_id' => $senderUser->id])
->whereDate('created_at', date('Y-m-d'))
->get();
// $recevier = User::query()->where('id', $imaliAccountReceiver->user_id)->count();
if ($imaliAccountReceiverCount > 0) {
$recevier = User::query()->where('id', $imaliAccountReceiver->user_id)->first();
$kyc = new Kyc();
$request->request->add(['id' => $senderUser->id, 'receiver_id' => $recevier->id]);
$result = $kyc->checkSender($request);
if ($result) {
$log = new Record();
$log->createLog([
'description' => 'SenderAccount: ' . $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => $result,
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return $result;
} else {
if ($imaliAccountSender) {
if ($imaliAccountReceiver->user_id === $imaliAccountSender->user_id) {
$log = new Record();
$log->createLog([
'description' => $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => 'Não pode Transferir para Si mesmo',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Não pode Transferir para si mesmo!', 'class' => 'error'], 400);
} elseif ($imaliAccountSender->balance < $request->amount) {
$log = new Record();
$log->createLog([
'description' => $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => 'Saldo insuficiente',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo insuficiente', 'class' => 'error'], 402);
} else {
$valorAPagar = $request->amount;
$points = round($valorAPagar);
$imaliAccountConfig = ImaliAccountConfig::find(1);
// $valorTaxadoTotal = $valorAPagar + $valorAPagar*($imaliAccountConfig->taxa)/100;
$valorTaxadoTotal = $valorAPagar + $imaliAccountConfig->taxa;
// Payer or Sender Section
DB::table('imali_accounts')->where('user_id', $sender_id)->decrement('balance', $valorTaxadoTotal);
// Recever User
DB::table('imali_accounts')->where('account_number', $imaliAccountReceiver->account_number)->increment('balance', $valorAPagar);
// $profit = $valorAPagar*$valorAPagar*($imaliAccountConfig->taxa)/100;
$profit = $imaliAccountConfig->taxa;
$transactionReference = $random->generateTransaction();
$transferencia = Transfer::create([
'transaction_id' => $transactionReference,
'sender_id' => $sender_id,
'reciever_id' => $recevier->id,
'reciever_name' => $recevier->name,
'reciever_account' => $imaliAccountReceiver->account_number,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => $profit,
'estado_color' => '#388E3C',
'estado' => 'Pago',
'amount_debited' => $valorTaxadoTotal,
'created_at' => now(),
'updated_at' => now(),
'category_id' => 22
]);
TransactionHistory::create([
'user_id' => $transferencia->sender_id,
'transfer_id' => $transferencia->id,
'category_id' => $transferencia->category_id,
'transaction_type' => 'transfer'
]);
$senderHistory = TransferHistory::create([
'transaction_id' => $transactionReference,
'user_id' => $senderUser->id,
// 'account_number' =>$imaliAccountReceiver->account_number,
'client_id' => $recevier->id,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => $profit,
'estado_color' => '#388E3C',
'estado' => 'Pago',
'user_status' => 'payer',
'amount_debited' => $valorTaxadoTotal,
'created_at' => now(),
'updated_at' => now(),
'category_id' => $transferencia->category_id
]);
TransactionHistory::create([
'user_id' => $senderHistory->user_id,
'transfer_history_id' => $senderHistory->id,
'category_id' => $senderHistory->category_id,
'transaction_type' => 'transfer'
]);
$receiverHistory = TransferHistory::create([
'transaction_id' => $transactionReference,
'user_id' => $recevier->id,
// 'account_number' =>$imaliAccountSender->account_number,
'client_id' => $senderUser->id,
'amount' => $valorAPagar,
'description' => $request->description,
'comissao' => 0,
'estado_color' => '#388E3C',
'estado' => 'Recebido',
'user_status' => 'receiver',
'amount_debited' => 0,
'created_at' => now(),
'updated_at' => now(),
'category_id' => $transferencia->category_id
]);
TransactionHistory::create([
'user_id' => $receiverHistory->user_id,
'transfer_history_id' => $receiverHistory->id,
'category_id' => $receiverHistory->category_id,
'transaction_type' => 'transfer'
]);
// $transferencia->paymentHistoric()->create([
// 'sender_account' =>$imaliAccountSender->account_number,
// 'sender_name' => $senderUser->name,
// 'amount_credited' => $valorTaxadoTotal,
// 'status_user' => 'reciever',
// 'status' => 'done',
// 'comissao' => $profit,
// 'amount' =>$valorAPagar,
// 'sender_id' => $senderUser->id,
// 'user_id' => $recevier->id,
// 'actual_points' =>$recevier->points,
// 'last_points' =>$recevier->points,
// 'win_points' => 0,
// 'transaction_id' =>$transferencia->transaction_id
// ]);
$saveProfit = $transferencia->profit()->create([
'payer_id' => $senderUser->id,
'payer_account' => $imaliAccountSender->account_number,
'amount' => $valorAPagar,
'amount_credited' => $valorTaxadoTotal,
'comissao' => $profit,
'profit_id' => $transactionReference,
'payment_id' => $transferencia->id,
]);
// $sms = new SendSMS();
// $sms->sendSMSTransferSender($transferencia);
// $sms->sendSMSTranferReceiver($transferencia);
$recevier2 = User::query()->where('id', $imaliAccountReceiver->user_id)->first();
$notification = array(
'icon' => 'ic_imali_logo_verde_01',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Recebeste ' . $request->amount . ' MT',
'body' => 'Parabéns, ' . ' recebeste ' . $request->amount . ' MT ' . ' do ' . $request->user()->name,
'click_action' => 'com.imali.payapp.payment_TRANSFER_DETAILS',
// 'color' => '#008577'
'color' => '#ffffff'
);
// $data = array(
// 'transaction' => $receiverHistory->transaction_id,
// 'name' => $request->user()->name,
// 'amount' => $receiverHistory->amount,
// 'amount_debited' => $receiverHistory->amount_debited,
// 'account_number' => $request->account_number,
// 'phone' => $request->user()->phone,
// 'description' => $request->description,
// 'data' => $receiverHistory->created_at,
// 'estado' => $receiverHistory->estado,
// 'comissao' => $receiverHistory->comissao,
// );
$data = array(
'transaction' => $receiverHistory->transaction_id,
'name' => $request->user()->name,
'amount' => (double)$senderHistory->amount,
'amount_debited' => (double)$receiverHistory->amount_debited,
'account_number' => (int)$imaliAccountSender->account_number,
'phone' => $request->user()->phone,
'description' => $request->description,
'data' => $receiverHistory->created_at,
'estado' => $receiverHistory->estado,
'comissao' => (double)$receiverHistory->comissao,
'terminal' => 'firebase'
);
$this->pushNotifification($recevier2->firebase_token, $notification, $data);
if ($request->id_request != 0) {
$moneyR = MoneyRequest::query()->where('id', $request->id_request)->first();
if ($moneyR) {
$moneyR->update([
'status' => 'sucesso'
]);
}
}
if ($saveProfit) {
$log = new Record();
$log->createLog([
'description' => $imaliAccountSender->account_number,
'details' => 'Transferência feita com Sucesso' . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'operation' => 'Transfer Money',
'status' => 'Success',
'properties' => json_encode($request->except(['pin'])),
'user_id' => $request->user()->id
]);
$log->createLog([
'description' => $imaliAccountSender->account_number . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'details' => 'Transferência Feita com Sucesso!',
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Sucess',
'origin_ip' => $request->ip(),
'origin_request' => $request->url(),
'user_id' => $request->user()->id
]);
return response()->json([
'message' => 'Transferência Feita com Sucesso!',
'transaction' => $transactionReference,
'created_at' => $transferencia->created_at
], 200);
}
}
}
}
} else {
$log = new Record();
$log->createLog([
'description' => $imaliAccountSender->account_number,
'details' => 'Conta i.Mali inválida' . ' ReceiverAccount: ' . $imaliAccountReceiver->account_number,
'operation' => 'Transfer Money',
// 'properties' => $request->all(),
'properties' => json_encode($request->except(['pin'])),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Conta i.Mali inválida', 'class' => 'error'], 404);
}
}
public function getPayments()
{
$payments = Payment::query()->join('users', 'users.id', '=', 'payments.sender_id')
->join('stores', 'stores.id', 'payments.store_id')
->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
->orderBy('payments.created_at', 'desc')
->select('payments.*', 'users.name as client_name', 'stores.name as merchant_name', 'stores.account_number as merchant_account', 'imali_accounts.account_number as client_account')
->get();
return response()->json(['data' => $payments], 200);
}
public function getMyPayments($id)
{
$payments = Payment::query()->join('users', 'users.id', '=', 'payments.sender_id')
->join('stores', 'stores.id', '=', 'payments.store_id')
->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
->where('payments.sender_id', $id)
->orderBy('payments.created_at', 'desc')
->select('payments.*', 'users.name as client_name', 'stores.name as merchant_name', 'stores.account_number as merchant_account', 'imali_accounts.account_number as client_account')
->get();
return response()->json(['data' => $payments], 200);
}
public function getMyPayments2(Request $request)
{
// $payments = Payment::query()->join('users', 'users.id', '=', 'payments.sender_id')
// ->join('stores', 'stores.id', 'payments.store_id')
// ->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
// ->where('payments.sender_id', $request->user()->id)
// ->orderBy('payments.created_at', 'desc')
// ->select('payments.*', 'users.name as client_name', 'merchant_accounts.name as merchant_name', 'merchant_accounts.account_number as merchant_account', 'imali_accounts.account_number as client_account')
// ->get();
$payments = Payment::query()
->join('users', 'users.id', '=', 'payments.sender_id')
->join('stores', 'stores.id', '=', 'payments.store_id')
->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
// ->join('ramo_activities', 'ramo_activities.id', 'payments.store_id')
->leftJoin('ramo_activities', 'ramo_activities.id', '=', 'payments.category_id')
->where('payments.sender_id', $request->user()->id)
->orderBy('payments.created_at', 'desc')
->select('payments.*', 'users.name as client_name', 'users.last_name', 'stores.name as merchant_name', 'stores.account_number as merchant_account', 'imali_accounts.account_number as client_account',
'ramo_activities.nome as category', 'ramo_activities.logo as logo_category')
->get();
return response()->json(['data' => $payments], 200);
}
public function getMyPayments3(Request $request)
{
$payments = Payment::query()
->join('users', 'users.id', '=', 'payments.sender_id')
->join('stores', 'stores.id', '=', 'payments.store_id')
->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
// ->leftJoin('ramo_activities', 'ramo_activities.id','=', 'payments.store_id')
->leftJoin('ramo_activities', 'ramo_activities.id', '=', 'payments.category_id')
// ->where('payments.sender_id', $request->user()->id)
->where('payments.sender_id', '=', 1)
->orderBy('payments.created_at', 'desc')
->select('payments.*', 'users.name as client_name', 'users.last_name', 'stores.name as merchant_name', 'stores.account_number as merchant_account', 'imali_accounts.account_number as client_account',
'ramo_activities.nome as category', 'ramo_activities.logo as logo_category')
->get();
return response()->json(['data' => $payments], 200);
}
public function getTransferencias()
{
$transfers = Transfer::query()->join('users', 'users.id', '=', 'transfers.sender_id')
->join('imali_accounts', 'imali_accounts.user_id', 'transfers.sender_id')
->orderBy('transfers.created_at', 'desc')
->select('transfers.*', 'users.name as sender_name', 'imali_accounts.account_number as sender_account')
->get();
return response()->json(['data' => $transfers], 200);
}
public function getMyTransferencias($id)
{
$transfers = Transfer::query()->join('users', 'users.id', '=', 'transfers.sender_id')
->join('imali_accounts', 'imali_accounts.user_id', 'transfers.sender_id')
->where('transfers.sender_id', $id)
->orderBy('transfers.created_at', 'desc')
->select('transfers.*', 'users.name as sender_name', 'imali_accounts.account_number as sender_account')
->get();
return response()->json(['data' => $transfers], 200);
}
public function getCarregamentos()
{
$carregamento = ImaliAccount::query()
->join('users', 'users.id', 'imali_accounts.user_id')
->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', 'imali_accounts.id')
->orderBy('recharge_imali_accounts.created_at', 'desc')
->select('users.name as user_name', 'imali_accounts.account_number as user_account', 'recharge_imali_accounts.*')->get();
return response()->json(['data' => $carregamento], 200);
}
public function getMyCarregamentos2($id)
{
$carregamento = ImaliAccount::query()
->join('users', 'users.id', 'imali_accounts.user_id')
->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', 'imali_accounts.id')
->where('users.id', $id)
->orderBy('recharge_imali_accounts.created_at', 'desc')
->select('users.name as user_name', 'imali_accounts.reference', 'imali_accounts.account_number', 'recharge_imali_accounts.*')->get();
return response()->json(['data' => $carregamento], 200);
}
public function getMyCarregamentos(Request $request)
{
// $carregamento = ImaliAccount::query()
// ->join('users', 'users.id', 'imali_accounts.user_id')
// ->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', 'imali_accounts.id')
// ->where('users.id', auth()->user()->id)
// ->orderBy('recharge_imali_accounts.created_at', 'desc')
// ->select('users.name as user_name', 'imali_accounts.account_number as user_account', 'recharge_imali_accounts.*')->get();
// return response()->json(['data' => $carregamento], 200);
$carregamento = ImaliAccount::query()
->join('users', 'users.id', 'imali_accounts.user_id')
->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', 'imali_accounts.id')
->where('users.id', $request->user()->id)
->orderBy('recharge_imali_accounts.created_at', 'desc')
->select('users.name as user_name', 'users.last_name', 'imali_accounts.reference', 'imali_accounts.account_number', 'recharge_imali_accounts.*')->get();
return response()->json(['data' => $carregamento], 200);
}
public function getTransferenciasHistory($id)
{
// $transfers = TransferHistory::query()
// ->join('users', 'users.id', '=', 'transfer_histories.client_id')
// ->join('users as sender', 'sender.id', '=', 'transfer_histories.user_id')
// ->join('users as receiver', 'receiver.id', '=', 'transfer_histories.user_id')
// ->join('imali_accounts as imaliSender', 'imaliSender.user_id','=', 'transfer_histories.user_id')
// ->join('imali_accounts as imaliReceiver', 'imaliReceiver.user_id','=', 'transfer_histories.user_id')
// ->join('imali_accounts', 'imali_accounts.user_id','=', 'transfer_histories.client_id')
// ->where('transfer_histories.user_id', $id)
//// ->where('transfer_histories.receiver_id', $id)
// ->orderBy('transfer_histories.created_at', 'desc')
// ->select(
// 'transfer_histories.*',
// 'sender.name as name_sender',
// 'receiver.name as name_receiver',
// 'imaliSender.account_number as account_sender',
// 'imaliReceiver.account_number as account_receiver',
// 'users.name',
// 'imali_accounts.account_number'
// )
// ->get();
$transfers = TransferHistory::query()
->join('users', 'users.id', '=', 'transfer_histories.client_id')
->join('users as sender', 'sender.id', '=', 'transfer_histories.user_id')
->join('users as receiver', 'receiver.id', '=', 'transfer_histories.user_id')
->join('imali_accounts as imaliSender', 'imaliSender.user_id', '=', 'transfer_histories.user_id')
->join('imali_accounts as imaliReceiver', 'imaliReceiver.user_id', '=', 'transfer_histories.user_id')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'transfer_histories.client_id')
->where('transfer_histories.user_id', $id)
// ->where('transfer_histories.receiver_id', $id)
->orderBy('transfer_histories.created_at', 'desc')
->select(
'transfer_histories.*',
'users.name',
'imali_accounts.account_number'
)
->get();
return response()->json(['data' => $transfers], 200);
}
public function getTransferenciasHistoryData(Request $request)
{
// $transfers = TransferHistory::query()
// ->join('users', 'users.id', '=', 'transfer_histories.client_id')
// ->join('users as sender', 'sender.id', '=', 'transfer_histories.user_id')
// ->join('users as receiver', 'receiver.id', '=', 'transfer_histories.user_id')
// ->join('imali_accounts as imaliSender', 'imaliSender.user_id', '=', 'transfer_histories.user_id')
// ->join('imali_accounts as imaliReceiver', 'imaliReceiver.user_id', '=', 'transfer_histories.user_id')
// ->join('imali_accounts', 'imali_accounts.user_id', '=', 'transfer_histories.client_id')
// ->where('transfer_histories.user_id', auth()->user()->id)
//// ->where('transfer_histories.receiver_id', $id)
// ->orderBy('transfer_histories.created_at', 'desc')
// ->select(
// 'transfer_histories.*',
// 'users.name',
// 'imali_accounts.account_number'
// )
// ->get();
// return response()->json(['data' => $transfers], 200);
$transfers = TransferHistory::query()
->join('users', 'users.id', '=', 'transfer_histories.client_id')
->join('users as sender', 'sender.id', '=', 'transfer_histories.user_id')
->join('users as receiver', 'receiver.id', '=', 'transfer_histories.user_id')
->join('imali_accounts as imaliSender', 'imaliSender.user_id', '=', 'transfer_histories.user_id')
->join('imali_accounts as imaliReceiver', 'imaliReceiver.user_id', '=', 'transfer_histories.user_id')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'transfer_histories.client_id')
->where('transfer_histories.user_id', $request->user()->id)
// ->where('transfer_histories.receiver_id', $id)
->orderBy('transfer_histories.created_at', 'desc')
->select(
'transfer_histories.*',
'users.name',
'imali_accounts.account_number',
'imaliSender.account_number as account_number_sender',
'sender.name as name_sender',
'sender.last_name as last_name_sender',
'users.name as name_receiver',
'users.last_name as last_name_receiver',
)
->get();
return response()->json(['data' => $transfers], 200);
}
public function getMyVouchers(Request $request)
{
$voucher = PurchaseVoucher::query()
->join('users', 'users.id', '=', 'purchase_vouchers.user_id')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'purchase_vouchers.user_id')
->leftJoin('transaction_locations', 'transaction_locations.voucher_id', '=', 'purchase_vouchers.id')
->leftJoin('ramo_activities', 'ramo_activities.id', '=', 'purchase_vouchers.category_id')
->orderByDesc('purchase_vouchers.created_at')
->where('purchase_vouchers.user_id', $request->user()->id)
->select('purchase_vouchers.*', 'imali_accounts.account_number', 'users.name', 'users.last_name',
'transaction_locations.longitude', 'transaction_locations.latitude', 'transaction_locations.country_name',
'transaction_locations.country_code', 'transaction_locations.admin_area', 'transaction_locations.sub_admin_area',
'ramo_activities.nome as category')
->get();
return response()->json(['data' => $voucher], 200);
}
public function checkReceiver(Request $request)
{
$imaliAccountReceiver = ImaliAccount::query()->where('account_number', $request->account_number)->first();
if ($imaliAccountReceiver) {
$log = new Record();
$log->createLog([
'description' => $request->account_number,
'details' => 'Conta Verificada com sucesso',
'operation' => 'Check Receiver or Client',
'properties' => json_encode($request->all()),
'status' => 'Success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Conta existente'], 200);
} else {
$log = new Record();
$log->createLog([
'description' => $request->account_number,
'details' => 'Conta i.Mali inválida',
'operation' => 'Check Receiver or Client',
// 'properties' => $request->all(),
'properties' => json_encode($request->all()),
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Conta i.Mali inválida'], 404);
}
}
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);
}
}