<?php
namespace App\Http\Controllers;
use App\AmountGenerate;
use App\Bank\MasterAccount;
use App\Bank\Payment;
use App\Classes\GenerateToken;
use App\Classes\CurrentPassword;
use App\Classes\Kyc;
use App\Classes\AuthPIN;
use App\Classes\Record;
use App\Classes\SendSMS;
use App\Classes\SmsManager;
use App\Classes\TransactionGeneration;
use App\Credelec;
use App\Imali\BankConection;
use App\Imali\ImaliAccount;
use App\Imali\RechargeImaliAccount;
use App\PhoneValidation;
use App\PurchaseVoucher;
use App\ReverteImaliAccount;
use App\SendMoneyB2B;
use App\SendMoneyImaliMpesa;
use App\TransferHistory;
use App\User;
use App\Wallet;
use App\WalletFee;
use App\Water;
use App\WithDrawall;
use App\WithdrawalsRequest;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Hash;
use Webpatser\Uuid\Uuid;
use Paymentsds\MPesa\Client;
use Illuminate\Support\Facades\Storage;
use URL;
use File;
use App\AccountDeletionReason;
use App\AccountDeletionRequest;
class UserController extends Controller
{
protected SmsManager $smsManager;
public function __construct()
{
$this->smsManager = new SmsManager();
$this->baseUrl = URL::to("/").'/images/avatar/';
$this->storagePath=public_path().'/images/avatar';
}
public function getAccountDeletionRequests(){
$deletionRequests=AccountDeletionRequest::query()->select('')->limit(10);
return response()->json(['data'=>$deletionRequests]);
}
public function getAccountDeletionReasons(){
$reasons=AccountDeletionReason::get();
return response()->json(['data'=>$reasons]);
}
public function makeAccountDeletionRequest(Request $request){
$this->validate($request,[
'account_number'=>'required',
'account_deletion_reason_id'=>'required',
'pin'=>'required',
],[
'account_number.required'=>'Campo account_number obrigatório',
'pin.required'=>'Campo pin obrigatório',
'account_deletion_reason_id'=>'Campo account_deletion_reason_id obrigatório!',
]);
$imaliAccount=ImaliAccount::query()->where('account_number',$request->account_number)->first();
$user=User::query()->where('id',2)->first();
if(!$imaliAccount) return response()->json(['message'=>'Conta imali inválida!'],400);
//Verificando se a conta que esta fazendo o pedido é a mesma que esta loggada
if($request->account_number != $request->user()->imaliAccount->account_number) return response()->json(['message'=>'Conta imali inválida!'],400);
//Validar PIN
if(!AuthPIN::validatePIN($request->user()->id,$request->pin,$request->user()->pin)) return response()->json(['message'=>'PIN incorrecto!'],400);
// a conta não pode ser cancelada com saldo
if($imaliAccount->balance > 0) return response()->json(['message'=>'Não é possível cancelar a tua conta imali, pois ainda tem saldo disponível.'],400);
if($imaliAccount->captive_balance > 0) return response()->json(['message'=>'Não é possível cancelar a tua conta imali, pois tens transaçõs por serem concluídas.'],400);
$imaliaccount_has_adr=AccountDeletionRequest::query()->where('account_number',$request->account_number)->first();
if($imaliaccount_has_adr) return response()->json(['message'=>'Esta conta '.$request->account_number.', já efectuou um pedido de cancelamento de conta.'],409);
if($request->account_deletion_reason_id == 8){
$this->validate($request,[
'commentary_reason'=>'required|min:15',
],[
'commentary_reason.required'=>'Campo commentary_reason obrigatório',
'commentary_reason.required'=>'Campo commentary_reason tem que ter no mínimo 15 caracteres',
]);
}
AccountDeletionRequest::create([
'account_number'=>$request->account_number,
'account_deletion_reason_id'=>$request->account_deletion_reason_id,
'commentary_reason'=>$request->commentary_reason,
]);
$user->status=0;
$user->is_online=0;
$user->update();
return response()->json(['message'=>'Pedido de encerramento de conta foi enviado com sucesso!'],200);
}
public function hideAndShowBalance(Request $request)
{
$user = User::find($request->user()->id);
if ($user) {
if ($user->balance_visibility == false) {
$user->update(['balance_visibility' => true]);
return response()->json(['message' => 'Actualizado com Sucesso para Verdadeiro'], 200);
} else {
$user->update(['balance_visibility' => false]);
return response()->json(['message' => 'Actualizado com Sucesso para Falso'], 200);
}
} else {
return response()->json(['message' => 'Utilizador não encontrado'], 400);
}
}
public function validatePin(Request $request)
{
$this->validate($request, [
'pin' => 'required|min:4'
]);
if (Hash::check($request->pin, $request->user()->pin)) {
return response()->json(['message' => 'ok'], 200);
} else {
return response()->json(['message' => 'Pin Incorrecto'], 405);
}
}
public function getMyMonthConsuming(Request $request)
{
$currentMonth = date('m');
// $data = DB::table("items")
// ->whereRaw('MONTH(created_at) = ?',[$currentMonth])
// ->get();
// $data = Item::select('*')
// ->whereMonth('created_at', Carbon::now()->month)
// ->get();
$voucher = PurchaseVoucher::query()
->whereRaw('MONTH(created_at) = ?', [$currentMonth])
->where('user_id', $request->user()->id)
->sum('price');
$transfer = TransferHistory::query()
->whereRaw('MONTH(created_at) = ?', [$currentMonth])
->where('user_id', $request->user()->id)
->where('user_status', 'payer')
->sum('amount');
$payments = Payment::query()
->whereRaw('MONTH(created_at) = ?', [$currentMonth])
->where('sender_id', $request->user()->id)
->sum('amount');
$credelec = Credelec::query()
->whereRaw('MONTH(created_at) = ?', [$currentMonth])
->where('user_id', $request->user()->id)
->sum('amount');
$water = Water::query()
->whereRaw('MONTH(created_at) = ?', [$currentMonth])
->where('user_id', $request->user()->id)
->sum('purchaseValue');
return response()->json(['water' => $water, 'voucher' => $voucher, 'transfer' => $transfer, 'payments' => $payments, 'credelec' => $credelec]);
}
public function getUser()
{
// $user = User::query()
// ->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
// ->where('users.id', auth()->user()->id)
// ->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference')
// ->first();
$user = ImaliAccount::query()
->join('users', 'imali_accounts.user_id', '=', 'users.id')
->join('imali_account_configs', 'imali_accounts.imali_account_config', '=', 'imali_account_configs.id')
->where('users.id', auth()->user()->id)
->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference', 'imali_account_configs.nr_transaction', 'imali_account_configs.max_value_operation', 'imali_account_configs.level')
->first();
$user->makeHidden(['id', 'profile', 'password', 'pin', 'firebase_token', 'created_at', 'updated_at'
, 'phone_reference', 'user_id', 'bi', 'document_id', 'remember_token', 'email_verified_at']);
return response()->json($user);
}
public function getMyImaliAccount($id)
{
$imali = ImaliAccount::query()->where('user_id', $id)->first();
return response()->json($imali);
}
public function rechargeByReference(Request $request)
{
$imaliAccount = ImaliAccount::query()->where('reference', $request->reference)->first();
$transactionString = new TransactionGeneration();
$user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id')
->where('users.id', $imaliAccount->user_id)
->select('users.*', 'imali_accounts.account_number')
->first();
$kyc = new Kyc();
$kyckCheck = $kyc->checkRecharge($request);
if ($kyckCheck) {
return $kyckCheck;
} else {
if ($imaliAccount) {
$balanceActual = $imaliAccount->balance + $request->amount;
$masterAccount = MasterAccount::find(2);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => $imaliAccount->id,
'transaction_id' => $transactionString->generateTransaction(),
'description' => $request->description,
'amount' => $request->amount,
'last_balance' => $imaliAccount->balance,
'balance' => $balanceActual,
'recharge_way' => 'Agente i.Mali 0001',
'estado' => 'sucesso',
'estado_color' => '#388E3C',
'master_account_id' => $masterAccount->id
]);
$masterBalance = $masterAccount->balance + $request->amount;
$masterAccount->update(['balance' => $masterBalance]);
if ($recharge) {
$imaliAccount->update(['balance' => $balanceActual]);
$notification = array(
// 'icon' => 'ic_imali_logo_verde_01',
'icon' => 'ic_i_mali_cover',
'title' => 'Carregamento ' . $recharge->amount . ' MT',
'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number,
'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS',
// 'color' => '#008577'
'color' => '#ffffff'
);
$data = array(
'transaction' => $recharge->transaction_id,
'name' => $user->name,
'description' => $request->description,
'amount' => (double)$recharge->amount,
'phone' => $user->phone,
'reference' => $imaliAccount->reference,
'data' => $recharge->created_at,
'estado' => $recharge->estado,
'route' => 'RECHARGE_DETAILS',
'recharge_way' => $recharge->recharge_way,
'account_number' => $user->account_number,
'terminal' => 'firebase'
);
$this->pushNotifification($user->firebase_token, $notification, $data);
$this->smsManager->sendSMSForUserRecharge($recharge);
}
if ($recharge) {
// Mail::to($user->email)->send(new Carregamento($recharge));
}
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number,
'details' => $user->name . ' ' . $user->last_name,
'operation' => 'Recharge by Reference',
'status' => 'success',
'user_id' => $request->user()->id
]);
if ($recharge) {
return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
}
}
////////
}
}
public function rechargeByReference2(Request $request)
{
// return $request->all();
foreach ($request->contentData as $requestData) {
$imaliAccount = ImaliAccount::query()->where('reference', $requestData['payment_reference'])->first();
$transactionString = new TransactionGeneration();
if ($imaliAccount) {
$user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id')
->where('users.id', $imaliAccount->user_id)
->select('users.*')
->first();
$balanceActual = $imaliAccount->balance + $requestData['paid_amount'];
$masterAccount = MasterAccount::find(2);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => $imaliAccount->id,
'transaction_id' => $transactionString->generateTransaction(),
'amount' => $requestData['paid_amount'],
'bank_date' => $requestData['datetime_of_transaction'],
'account_reference' => $requestData['payment_reference'],
'last_balance' => $imaliAccount->balance,
'balance' => $balanceActual,
'recharge_way' => $requestData['terminal_locality'],
'estado' => 'sucesso',
'estado_color' => '#388E3C',
'master_account_id' => $masterAccount->id,
'content_id' => $requestData['content_id']
]);
$masterBalance = $masterAccount->balance + $requestData['paid_amount'];
$masterAccount->update(['balance' => $masterBalance]);
if ($recharge) {
$imaliAccount->update(['balance' => $balanceActual]);
$notification = array(
'icon' => 'ic_imali_logo_verde_01',
// 'icon' => 'ic_i_mali_cover',
'title' => 'Carregamento ' . $recharge->amount . ' MT',
'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number,
// 'click_action' => 'com.imali.payapp.payment_TRANSFER_DETAILS',
'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS',
// 'color' => '#008577'
'color' => '#ffffff'
);
$data = array(
'transaction' => $recharge->transaction_id,
'name' => $user->name,
'amount' => (double)$recharge->amount,
'phone' => $user->phone,
'reference' => $imaliAccount->reference,
'data' => $recharge->created_at,
'estado' => $recharge->estado,
'route' => 'RECHARGE_DETAILS',
'recharge_way' => $recharge->recharge_way,
'terminal' => 'firebase'
);
$this->pushNotifification($user->firebase_token, $notification, $data);
$this->smsManager->sendSMSForUserRecharge($recharge);
}
// if ($recharge) {
//// Mail::to($user->email)->send(new Carregamento($recharge));
// }
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number,
// 'details' => $user->name . ' ' . $user->last_name,
// 'operation' => 'Recharge by Reference',
// 'status' => 'success',
// 'user_id' => $request->user()->id
// ]);
if ($recharge) {
// return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
}
} else {
// PendingRecharge::create([
// 'reference' => $requestData['payment_reference'],
// 'amount' => $requestData['paid_amount'],
// 'content_id' => $requestData['content_id']
// // 'content_id' => $request->content_id
// ]);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => 0,
'transaction_id' => $transactionString->generateTransaction(),
'amount' => $requestData['paid_amount'],
'account_reference' => $requestData['payment_reference'],
'bank_date' => $requestData['datetime_of_transaction'],
'last_balance' => 0,
'balance' => 0,
'recharge_way' => $requestData['terminal_locality'],
'estado' => 'falhou',
'estado_color' => '#388E3C',
'master_account_id' => 0,
'content_id' => $requestData['content_id']
]);
// return response()->json(['message' => 'Referencia inválida'], 400);
}
// $kyc = new Kyc();
//// $kyckCheck = $kyc->checkRecharge($request);
// $kyckCheck = $kyc->checkRechargeByBank($requestData);
//
// if ($kyckCheck) {
// return $kyckCheck;
// } else {
//
//
// }
}
return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
}
public function rechargeAccount2(Request $request)
{
$transactionString = new TransactionGeneration();
$public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
$api_host = "api.sandbox.vm.co.mz";
$api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
$origin = "*";
$service_provider_code = "171717";
$config = new \abdulmueid\mpesa\Config($public_key, $api_host, $api_key, $origin, $service_provider_code, '', '');
$transaction = new \abdulmueid\mpesa\Transaction($config);
$msisdn = '258' . $request->phone;
$amount = $request->amount;
$reference = 'T12344C';
// $third_party_reference = '111PA2D';
$third_party_reference = $transactionString->generateTransaction();
$user = User::query()->where('user_id', $request->user_id)->first();
$imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();
if ($imaliAccount) {
$payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference);
if ($payment->getCode() == 'INS-0') {
if ($imaliAccount) {
$balanceActual = $imaliAccount->balance + $request->amount;
$masterAccount = MasterAccount::find(1);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => $imaliAccount->id,
'transaction_id' => $transactionString->generateTransaction(),
'amount' => $request->amount,
'last_balance' => $imaliAccount->balance,
'balance' => $balanceActual,
'recharge_way' => 'M-pesa' . $request->phone,
'estado' => 'sucesso',
'estado_color' => '#388E3C',
'master_account_id' => $masterAccount->id
]);
$masterBalance = $masterAccount->balance + $request->amount;
$masterAccount->update(['balance' => $masterBalance]);
if ($recharge) {
$imaliAccount->update(['balance' => $balanceActual]);
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Carregamento, feito com Sucesso',
'operation' => 'Recharge by M-pesa',
'status' => 'success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200);
}
}
}
if ($payment->getCode() == 'INS-2006') {
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Saldo Insuficiente',
'operation' => 'Recharge by M-pesa',
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Saldo Insuficiente'], 422);
}
if ($payment->getCode() == 'INS-9') {
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Excedeu o tempo limite de transacção',
'operation' => 'Recharge by M-pesa',
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408);
}
if ($payment->getCode() == 'INS-9') {
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Valor inválido',
'operation' => 'Recharge by M-pesa',
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Valor inválido'], 400);
}
if ($payment->getCode() == 'INS-995') {
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Conta Mpesa com Problemas',
'operation' => 'Recharge by M-pesa',
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Conta Mpesa com Problemas'], 400);
}
if ($payment->getCode() == 'INS-996') {
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Este número nao tem conta Mpesa',
'operation' => 'Recharge by M-pesa',
'status' => 'Error',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400);
}
}
}
public function rechargeAccount(Request $request)
{
$transactionString = new TransactionGeneration();
$public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
$api_host = "api.sandbox.vm.co.mz";
$api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
$origin = "*";
$service_provider_code = "171717";
$reference = 'T12344C';
$third_party_reference = $transactionString->generateTransaction();
$client = new Client([
'apiKey' => $api_key, // API Key
'publicKey' => $public_key, // Public Key
'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
]);
$paymentData = [
// 'from' => '+258845030902', // input_CustomerMSISDN
'from' => '258' . $request->phone, // input_CustomerMSISDN
// 'from' => $request->phone, // input_CustomerMSISDN
'reference' => '111PA2D', // input_ThirdPartyReference
'transaction' => $third_party_reference, // input_TransactionReference
'amount' => $request->amount // input_Amount
];
$user = User::query()->where('user_id', $request->user_id)->first();
$imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();
if ($imaliAccount) {
// $payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference);
// $results = $client->receive($paymentData);
$results = $client->receive($paymentData);
if ($results->success) {
// Handle success
// if ($result->getCode() == 'INS-0') {
// return response()->json($result);
if ($imaliAccount) {
$balanceActual = $imaliAccount->balance + $request->amount;
$masterAccount = MasterAccount::find(1);
$recharge = RechargeImaliAccount::create([
'imali_account_id' => $imaliAccount->id,
'transaction_id' => $transactionString->generateTransaction(),
'amount' => $request->amount,
'last_balance' => $imaliAccount->balance,
'balance' => $balanceActual,
'recharge_way' => 'M-pesa' . $request->phone,
'estado' => 'sucesso',
'estado_color' => '#388E3C',
'master_account_id' => $masterAccount->id
]);
$masterBalance = $masterAccount->balance + $request->amount;
$masterAccount->update(['balance' => $masterBalance]);
if ($recharge) {
$imaliAccount->update(['balance' => $balanceActual]);
$log = new Record();
$log->createLog([
'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
'details' => 'Carregamento, feito com Sucesso',
'operation' => 'Recharge by M-pesa',
'status' => 'success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200)->header('Content-Type', 'application/json');
}
}
// }
} else {
// return response()->json($result);
// Handle failure
// if ($result->getCode() == 'INS-2006') {
//
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
// 'details' => 'Saldo Insuficiente',
// 'operation' => 'Recharge by M-pesa',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
//
// return response()->json(['message' => 'Saldo Insuficiente'], 422);
// }
// if ($result->getCode() == 'INS-9') {
//
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
// 'details' => 'Excedeu o tempo limite de transacção',
// 'operation' => 'Recharge by M-pesa',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
//
// return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408);
// }
// if ($result->getCode() == 'INS-9') {
//
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
// 'details' => 'Valor inválido',
// 'operation' => 'Recharge by M-pesa',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
//
// return response()->json(['message' => 'Valor inválido'], 400);
// }
// if ($result->getCode() == 'INS-995') {
//
//
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
// 'details' => 'Conta Mpesa com Problemas',
// 'operation' => 'Recharge by M-pesa',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
//
// return response()->json(['message' => 'Conta Mpesa com Problemas'], 400);
// }
// if ($result->getCode() == 'INS-996') {
//
// $log = new Record();
// $log->createLog([
// 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name,
// 'details' => 'Este número nao tem conta Mpesa',
// 'operation' => 'Recharge by M-pesa',
// 'status' => 'Error',
// 'user_id' => $request->user()->id
// ]);
//
// return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400);
// }
}
}
}
public function bankConnections()
{
$banks = BankConection::all();
return response()->json(['data' => $banks], 200);
}
public function users()
{
$users = User::all();
return response()->json(['data' => $users], 200);
}
public function resendCode(Request $request)
{
$token = new GenerateToken();
$data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()];
$this->smsManager->smsVerifyUser($data);
$validate = PhoneValidation::query()->where('phone', $request->phone)->count();
if ($validate === 0) {
$save = PhoneValidation::create([
'phone' => $request->phone,
'contry_code' => $request->contry_code,
'expire_at' => now(),
'duration' => 5,
'codigo' => $data['codigo'],
'is_Validated' => 1
]);
if ($save) {
$log = new Record();
$log->createLog([
'description' => $request->phone . ' ' . $data['codigo'],
'details' => 'Código de Verificação enviado com sucesso!',
'operation' => 'Resend Verification code',
'status' => 'Success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Código de Verificação enviado com sucesso!'], 200);
}
} else {
$validate = PhoneValidation::query()->where('phone', $request->phone)->first();
$save = $validate->update(['codigo' => $data['codigo']]);
if ($save) {
$data = ['phone' => $request->phone, 'codigo' => $validate->codigo];
return response()->json(['message' => 'Código de Verificação reenviado com sucesso!', 'codigo' => $data['codigo'], 'phone' => $data['phone']], 200);
}
}
}
public function resendCodeOld(Request $request)
{
$token = new GenerateToken();
$validate = PhoneValidation::query()->where('phone', $request->phone)->count();
$phoneValidate = PhoneValidation::query()->where('phone', $request->phone)->first();
if ($validate === 0) {
$data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()];
$sms = new SendSMS();
$save = PhoneValidation::create([
'phone' => $request->phone,
'expire_at' => now(),
'duration' => 5,
'codigo' => $data['codigo'],
'is_Validated' => 1
]);
$sent = $sms->verifyUser($data);
if ($save) {
$log = new Record();
$log->createLog([
'description' => $request->phone . ' ' . $data['codigo'],
'details' => 'Código de Verificação enviado com sucesso!',
'operation' => 'Resend Verification code',
'status' => 'Success',
'user_id' => $request->user()->id
]);
return response()->json(['message' => 'Código de Verificação enviado com sucesso!'], 200);
}
} else {
$validate = PhoneValidation::query()->where('phone', $request->phone)->first();
// $save = $validate->update(['codigo' => $data['codigo']]);
if ($validate) {
$data = ['phone' => $request->phone, 'codigo' => $validate->phone];
$sms = new SendSMS();
$sms->verifyUser($data);
return response()->json(['message' => 'Código de Verificação reenviado com sucesso!', 'codigo' => $data['codigo']], 200);
}
}
}
public function verifyUserNumber(Request $request)
{
// $firstReplace= str_replace(' ', '',$request->phone);
// $request['phone'] = str_replace('-', '',$firstReplace);
$this->validate($request, [
'name' => 'required',
'phone' => 'required|unique:users|min:9',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
'bi' => 'required|min:13'
], [
'email.required' => 'O Campo Email é de carácter Obrigatório',
'email.unique' => 'Este Email já está em uso',
'phone.required' => 'O Número do celular é obrigatório',
'phone.unique' => 'O Número do celular já está em uso',
'phone.min' => 'O Campo Celular deve ter 9 dígitos',
'name.required' => 'O Campo Nome é obrigatório',
'bi.required' => 'O campo Bi é Obrigatório',
// 'bi.min'=>'O campo Bi ter 13 dígitos',
'password.required' => 'O Campo Senha é obrigatório',
'password.confirmed' => 'Senhas incompatíveis',
'password.min' => 'A senha deve ter 8 digitos no mínimo'
]);
$token = new GenerateToken();
$data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()];
$this->smsManager->smsVerifyUser($data);
$validate = PhoneValidation::query()->where('phone', '=', $request->phone)->count();
if ($validate === 0) {
$save = PhoneValidation::create([
'phone' => $request->phone,
'country_code' => $request->country_code,
'expire_at' => now(),
'duration' => 2,
'codigo' => $data['codigo'],
'is_Validated' => 1
]);
if ($save) {
return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!'], 200);
}
} else {
$validate = PhoneValidation::query()->where('phone', $request->phone)->first();
$save = $validate->update(['codigo' => $data['codigo']]);
if ($save) {
return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!', 'codigo' => $data['codigo']], 200);
}
}
}
public function checkCodigo(Request $request)
{
try {
$validate = PhoneValidation::query()->where('phone', $request->phone)->where('codigo', $request->codigo)->count();
if ($validate > 0) {
$log = new Record();
$log->createLog([
'description' => $request->phone,
'details' => 'Celular Verificado com Successo!',
'operation' => 'Check Phone Validation',
'status' => 'Success',
'user_id' => 1
]);
return response()->json(['message' => 'Celular Verificado com Successo!'], 200);
} else {
$log = new Record();
$log->createLog([
'description' => $request->phone,
'details' => 'Código inválido',
'operation' => 'Check Phone Validation',
'status' => 'Error',
'user_id' => 1
]);
return response()->json(['message' => 'Código inválido'], 400);
}
} catch (Exception $exception) {
return response()->json($exception);
}
}
public function getUsers()
{
return response()->json(['users' => User::all()]);
}
public function getImaliAccounts(Request $request)
{
$perPage=!!$request->input('per_page')?$request->input('per_page'):10;
$orderType=$request->input('order_type') === 'ASC'?'ASC':'DESC';
$orderBy=!!$request->input('order_by') && $request->input('order_by')!=='null'?$request->input('order_by'):'imali_accounts.id';
$users = User::query()->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id')
->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
->select('imali_accounts.*', 'imali_account_configs.level', 'users.id','users.name','users.last_name','users.name','users.country_code','users.email','users.phone','users.status')
->orderBy($orderBy,$orderType)->paginate($perPage);
$imali = $users->setCollection($users->getCollection()
->transform(function($item) {
$item['last_recharge']=$item->imaliAccount->recharges()->orderBy('id','desc')->first();
$item['document']= $item->documents()->orderBy('id','desc')->first();
return $item;
}));
$imali->makeHidden([
'password',
'pin',
'imali_account_config',
'profile',
'remember_token',
'firebase_token'
]);
return response()->json($imali);
}
public function updateUserData(Request $request)
{
$user = $imali = ImaliAccount::query()
->join('users', 'users.id', '=', 'imali_accounts.user_id')
->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config')
->where('users.user_id', $request->user_id)
->first();
if ($user) {
$u = User::find($user->id);
$u->update([
'name' => $request->name,
'last_name' => $request->last_name,
'profile' => $request->profile,
'status' => $request->status,
'birthday' => $request->birthday,
'bi' => $request->bi,
]);
$kyc = ImaliAccount::query()->where('user_id', $user->id)->first();
if ($kyc) {
$kyc->update([
'imali_account_config' => $request->imali_account_config
]);
}
return response()->json(['message' => 'Dados do Cliente Actualizados com Sucesso!'], 200);
}
}
public function updateUserStatus($account_number)
{
$imali = ImaliAccount::query()->where('account_number', $account_number)->first();
$user = User::findOrFail($imali->user_id);
$user->status = !$user->status;
$user->save();
return response()->json(['message' => 'Estado actualizado com sucesso!'], 200);
}
public function updateUserDataMobile(Request $request)
{
$user = $request->user();
if ($user) {
$update = User::query()
->where('id', $user->id)
->update([
'name' => $request->name,
'last_name' => $request->last_name,
'bi' => $request->bi,
'birthday' => $request->birthday,
]);
if ($update) {
return response()->json(['message' => 'Dados Actualizados com Sucesso'], 200);
}
}
}
public function changePassword(Request $request)
{
$this->validate($request, [
'current_password' => ['required', new CurrentPassword()],
// 'new_password' => 'required|min:8|confirmed',
'new_password' => ['required', 'min:8', 'confirmed'],
'new_password_confirmation' => 'required|min:8',
], [
'current_password.required' => 'O Campo Senha Actual é Obrigatório',
'new_password.required' => 'O Campo Nova Senha é Obrigatório',
'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório',
'new_password.confirmed' => 'Senhas incompatíveis',
'current_password.min' => 'A senha deve ter 8 digitos no mínimo',
'new_password.min' => 'A senha deve ter 8 digitos no mínimo',
'new_password_confirmation.min' => 'A senha deve ter 8 digitos no mínimo'
]
);
if (Hash::check($request->current_password, $request->user()->password)) {
$request->user()->update([
'password' => bcrypt($request->new_password)
]);
return response()->json(['message' => 'Senhas Compativeis'], 200);
} else {
return response()->json(['message' => 'Senha Antiga Inválida'], 404);
}
}
public function uploadPhoto(Request $request)
{
return $request->all();
}
public function disableUser($id)
{
$user = User::query()->where('user_id', $id)->first();
if ($user->status === 1) {
$update = $user->update(['status' => 0]);
return response()->json(['message' => 'Utilizador Bloqueado com Sucesso'], 200);
} else {
return response()->json(['message' => 'Utilizador Activo com Sucesso'], 200);
}
}
public function generateAmount(Request $request)
{
$imali = ImaliAccount::query()->where('user_id', $request->user()->id)->first();
$save = AmountGenerate::create([
'user_id' => $request->user()->id,
'transaction' => Uuid::generate()->string,
'amount' => $request->amount,
'account_number' => $imali->account_number,
'qrcode' => '',
'firebase_token' => $request->firebase_token
]);
// $log = new Record();
// $log->createLog([
// 'description' => $save->account_number . ' ' . $save->amount . ' ' . $save->transaction,
// 'details' => 'Codigo gerado com Sucesso',
// 'operation' => 'Generate Amount to Receiver By Qrcode',
// 'status' => 'Success',
// 'user_id' => $request->user()->id
// ]);
return response()->json(['message' => 'Codigo gerado com Sucesso', 'transaction' => $save->transaction, 'account_number' => $save->account_number, 'amount' => $save->amount], 200);
}
public function getClientDataForPayment($transaction)
{
$client = AmountGenerate::query()
->join('users', 'users.id', '=', 'amount_generates.user_id')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id')
->where('amount_generates.transaction', $transaction)
// ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number')
->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number')
// ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number')
->first();
if ($client) {
return response()->json($client, 200);
} else {
$user = ImaliAccount::query()
->join('users', 'users.id', '=', 'imali_accounts.user_id')
// ->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id')
->where('imali_accounts.account_number', $transaction)
->select('users.name', 'imali_accounts.account_number')
->first();
return response()->json($user, 200);
}
}
public function getClientAccount($aacount)
{
$client = AmountGenerate::query()
->join('users', 'users.id', '=', 'amount_generates.user_id')
->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id')
->where('amount_generates.transaction', $aacount)
// ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number')
->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number')
// ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number')
->first();
return response()->json($client, 200);
}
public function checkPin(Request $request)
{
$user = User::find($request->user()->id);
if (Hash::check($request->pin, $user->pin)) {
return response()->json(['message' => 'Pin Verificado'], 201);
} else {
return response()->json(['message' => 'Pin Incorrecto'], 400);
}
}
public function getBalance(Request $request)
{
// return $request->all();
$imali = ImaliAccount::query()
->join('users', 'users.id', '=', 'imali_accounts.user_id')
->where('users.phone', $request->phone)
->first();
if ($imali) {
return response()->json($imali);
} else {
return response()->json(['message' => 'Conta invalida']);
}
}
public function updateFirebaseToken(Request $request)
{
}
public function reverteTransaction(Request $request)
{
$transactionString = new TransactionGeneration();
$public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
$api_host = "api.sandbox.vm.co.mz";
$api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
$origin = "*";
$service_provider_code = "171717";
$reference = 'T12344C';
$client = new Client([
'apiKey' => $api_key, // API Key
'publicKey' => $public_key, // Public Key
'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
]);
$transaction = RechargeImaliAccount::query()
->where('id', $request->id)
->where('transaction_id', $request->transaction)
->where('imali_account_id', $request->imali_account_id)
->first();
$paymentData = [
'reference' => 'T12344C', // input_ThirdPartyReference
'transaction' => $transaction->transaction_id, // input_TransactionReference
'amount' => $transaction->amount // input_Amount
];
$transactionString = new TransactionGeneration();
if ($transaction) {
$results = $client->revert($paymentData);
if ($results->success) {
ReverteImaliAccount::create([
'transaction' => $transactionString->generateTransaction(),
'user_id' => $request->user()->id,
'imali_account_id' => $transaction->imali_account_id,
'recharge_imali_account_id' => $transaction->id
]);
return response()->json(['message' => 'Transacção revertida com Sucesso'], 200);
}
}
}
public function sendMoneyImaliMpesa(Request $request)
{
$transactionString = new TransactionGeneration();
$public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
$api_host = "api.sandbox.vm.co.mz";
$api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
$origin = "*";
$service_provider_code = "171717";
$reference = 'T12344C';
$third_party_reference = $transactionString->generateTransaction();
$client = new Client([
'apiKey' => $api_key, // API Key
'publicKey' => $public_key, // Public Key
'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
]);
$paymentData = [
'to' => '258' . $request->phone, // input_CustomerMSISDN
'reference' => 'T12344C', // input_ThirdPartyReference
'transaction' => $third_party_reference, // input_TransactionReference
'amount' => $request->amount // input_Amount
];
$user = User::query()->where('user_id', $request->user_id)->first();
// $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first();
$imaliAccount = ImaliAccount::query()->where('user_id', $request->user_id)->first();
$total = ($request->amount + $request->amount * 0.3);
if ($imaliAccount->balance >= $total) {
$results = $client->send($paymentData);
if ($results->success) {
SendMoneyImaliMpesa::create([
'transaction' => $third_party_reference,
'fee' => ($request->amount * 0.3),
'fee_type' => '3%',
'amount' => $request->amount,
'imali_account' => $request->imali_account,
'admin_id' => $request->admin_id,
'user_id' => $request->user_id,
'phone' => $request->phone
]);
// dd($results);
return response()->json(['message' => 'Transacção ' . $results->data['transaction'] . ' efectuada com Sucesso'], 200);
}
}
}
public function sendMoneyB2B(Request $request)
{
$transactionString = new TransactionGeneration();
$public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ==";
$api_host = "api.sandbox.vm.co.mz";
$api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0";
$origin = "*";
$service_provider_code = "171717";
$reference = 'T12344C';
$third_party_reference = $transactionString->generateTransaction();
$client = new Client([
'apiKey' => $api_key, // API Key
'publicKey' => $public_key, // Public Key
'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode
]);
// 979797
$paymentData = [
'to' => $request->entity, // input_ReceiverPartyCode
'reference' => '111PA2D', // input_ThirdPartyReference
'transaction' => $third_party_reference, // input_TransactionReference
'amount' => $request->amount // input_Amount
];
$results = $client->send($paymentData);
if ($results->success) {
SendMoneyB2B::create([
'entity' => $request->entity,
'amount' => $request->amount,
'admin_id' => $request->user()->id,
'transaction' => $third_party_reference,
]);
}
return response()->json(['message' => 'Transacção efectuada com Sucesso'], 200);
}
public function sendSMS(Request $request)
{
$data = [$request->phone];
$sms = new SendSMS();
$sent = $sms->sendMessageTest($data);
return response($sent);
}
public function getContacts()
{
$contacts = User::query()->value('phone');
return response()->json(['data' => $contacts]);
}
// NOVO CODIGO UPLOAD IMAGE
# actualizar no server
public function imageCompress($image, $newImageName, $imgDefaultRatio){
$image = \Image::make(file_get_contents($image));
$image->save($this->storagePath.'/'.$newImageName, $imgDefaultRatio);
}
#actualizar no server
public function imageUpload($image, $newImageName){
$image->move($this->storagePath, $newImageName);
}
# actualizar no server
public function generateImageUrl(Request $request,$imageAttr){
if($request->hasFile($imageAttr) && $request->file($imageAttr)->isValid()){
// Validar imagem
$this->validate($request, [
$imageAttr => 'mimes:jpeg,jpg,png|max:4096'
],
[
'photo.required' => 'O campo photo é Obrigatório',
'photo.mimes' => 'Formato de imagem invalido, formatos permitidos jpeg,jpg,png',
'photo.max' => 'O tamanho de imagem permitido somente abaixo de 4 MB',
]);
//fazer o upload
$image=$request[$imageAttr];
$newImageName=time().$image->getClientOriginalName();
//verificar size
$imageSizeMB = round($request->file($imageAttr)->getSize()/(1024*1024),2);
// Diminuir tamanho..
if($imageSizeMB >= 1){
$imgDefaultRatio = 65;
if($imageSizeMB >= 3){
$imgDefaultRatio = 35;
}
//comprimir e fazer upload
$this->imageCompress($image, $newImageName, $imgDefaultRatio);
} else {
$this->imageUpload($image, $newImageName);
}
return $this->baseUrl.$newImageName;
} else {
$exploded = explode(',', $request[$imageAttr]);
$decoded = base64_decode($exploded[$this->is_string_encoded($request[$imageAttr])?0:1],True);
$f = finfo_open();
$mime_type = finfo_buffer($f, $decoded, FILEINFO_MIME_TYPE);
$valiExtension = ['jpeg', 'jpg', 'png'];
$imageExtention = substr($mime_type, 6, strlen($mime_type));
if(!in_array($imageExtention, $valiExtension)) return response()->json(['message'=>"Formato de imagem invalido, formatos permitidos jpeg,jpg,png"], 400);
if($this->getImageSizeMB($decoded) > 4 ) return response()->json(['message'=>"O tamanho de imagem permitido somente abaixo de 4 MB"], 400);
// if (base64_encode($decoded) !== $exploded[$this->is_string_encoded($request[$imageAttr])?0:1]) return response()->json(['message' => 'Imagem invalida.'],400);
//faz o upload temporario no storage - by Rodrigues Mafumo
$tempFileName = $imageAttr.'.jpg';
if(Storage::put($tempFileName, $decoded)){
$path = storage_path('app/').$tempFileName;
$tempFile = new \Symfony\Component\HttpFoundation\File\File($path);
$file = UploadedFile::createFromBase(new UploadedFile($tempFile->getPathname(),$tempFileName,$tempFile->getMimeType(),null,true));
$newRequest = new Request();
$newRequest->files->set($imageAttr,$file);
return $this->generateImageUrl($newRequest,$imageAttr);
}
}
}
#server
private function getImageSizeMB($imagebase64){
$size_in_bytes = (int) (strlen(rtrim($imagebase64, '=')) * 1);
$size_in_kb = $size_in_bytes / 1024;
$size_in_mb = round($size_in_kb / 1024,2);
return $size_in_mb;
}
#server
public function updateAvatar(Request $request){
$user = User::find($request->user()->id);
$posicao = strpos($user->photo, 'avatar') + 7;
//? Retorna a posicao do avatar
$imageName = substr($user->photo, $posicao, strlen($user->photo));
File::delete(public_path('/images/avatar/'.$imageName));
$photo = $this->generateImageUrl($request,'photo');
if(!is_string($photo)) return $photo;
$user->photo = $photo;
$user->update();
return response()->json(['message' => 'Avatar Actualizado com Sucesso']);
}
#server
// Check if there are valid base64 characters
function is_string_encoded($s){
return !startsWith("data:image/", $s);
}
//FIM UPLOAD IMAGE
public function getMyCredelec(Request $request)
{
$credelec = Credelec::query()
->where('user_id', $request->user()->id)
->orderByDesc('created_at')
->get();
return response()->json(['data' => $credelec]);
}
public function getMyWater(Request $request)
{
$credelec = Water::query()
->where('user_id', $request->user()->id)
->orderByDesc('created_at')
->get();
return response()->json(['data' => $credelec]);
}
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);
}
//? Check User Name
public function checkUserName(Request $request){
$regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/";
if(!preg_match($regex, $request->username)) return response()->json(['message'=> 'Username inválido, caracteres permitidos [ a-z ou A-Z ou 0-9 ou _ ]'], 400);
$user = User::query()->where('username', $request->username)->first();
if($user) return response()->json(['message'=> 'Username já esta em uso'], 409);
return response()->json(['message'=> 'Username disponivel'], 200);
}
//? Check Phone
public function checkUserPhone(Request $request){
// $regex = "/^[0-9]+$/";
$regex = "/^(82|83|84|85|86|87)+[0-9]{7,7}$/";
if(!preg_match($regex, $request->phone)) return response()->json(['message'=> 'Numero de telefone inválido'], 400);
$user = User::query()->where('phone', $request->phone)->first();
if($user) return response()->json(['message'=> 'Numero de telefone já esta em uso'], 409);
return response()->json(['message'=> 'Numero de telefone disponivel'], 200);
}
//? Check Email
public function checkUserEmail(Request $request){
$this->validate($request, [
'email' => 'required'
],
[
'email.required' => 'O campo email é Obrigatório',
]);
// $regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/";
// $regex = "/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/";
$regex = "/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i";
if(!preg_match($regex, $request->email)) return response()->json(['message'=> 'Email inválido'], 400);
$user = User::query()->where('email', $request->email)->first();
if($user) return response()->json(['message'=> 'Email já esta em uso'], 409);
return response()->json(['message'=> 'Email disponivel'], 200);
}
//? Update Username
public function updateUsername(Request $request)
{
// Validar imagem
$this->validate($request, [
'username' => 'required|max:15'
],
[
'username.required' => 'O campo username é obrigatório',
]);
$regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/";
if(!preg_match($regex, $request->username)) return response()->json(['message'=> 'Username inválido, caracteres permitidos [ a-z ou A-Z ou 0-9 ou _ ]'], 400);
$user = User::query()->where('username', $request->username)->first();
if($user) return response()->json(['message'=> 'Username já esta em uso'], 409);
// return response()->json(['message'=> 'Username disponivel'], 200);
$user = $request->user();
if ($user) {
$update = User::query()
->where('id', $user->id)
->update([
'username' => $request->username
]);
if ($update) {
return response()->json(['message' => 'Username actualizado com Sucesso'], 200);
}
}
}
public function walletCSV(){
return Excel::download(new Wallet, 'wallet.csv');
}
public function createWithDrawalls(Request $request){
$this->validate($request, [
'account_type' => 'required',
'amount' => 'required',
// 'fee' => 'required',
'description' => 'required',
'phone' => 'required',
// 'nib' => 'required',
'wallets_id' => 'required',
// 'total' => 'required',
'transaction_id' => 'required',
'commission' => 'required',
],
);
$imali2 = ImaliAccount::query()->where('user_id', auth('api')->user()->id)->first();
$imali = ImaliAccount::query()->where('user_id', auth('api')->user()->id)->first();
$wallets = Wallet::query()
->select('wallets.*')
->get();
$walletsFee = WalletFee::query()
->where('wallets_id', $request->wallets_id)
->where('min_amount', '<=', $request->amount)
->where('max_amount', '>=', $request->amount)
->first();
if(!$walletsFee) return response()->json(['message' => 'Montante invalido'], 400);
// return $walletsFee;
$total = $request->amount + $walletsFee->fee;
$imali->balance = $imali->balance - $total;
$imali->captive_balance = $total;
$imali->update();
$account_number = 0;
if($request->account_type === 'client'){
$account_number = ImaliAccount::query()
->where('imali_accounts.user_id', auth('api')->user()->id)
->select('imali_accounts.balance', 'imali_accounts.account_number', 'imali_accounts.user_id')
->first()->account_number;
} else {
$account_number = Store::query()
->where('stores.id', auth('store-api')->user()->id)
->select('stores.account_number')
->first()->account_number;
}
$withdrawalls = WithdrawalsRequest::create([
'imali_account' => $account_number,
// 'account_type' => $request->account_type,
'amount' => $request->amount,
'fee' => $walletsFee->fee,
'description' => $request->description,
'phone' => $request->phone,
'nib' => $request->nib,
'wallets_id' => $request->wallets_id,
'status' => 'new',
'old_balance' => $imali2->balance,
'new_balance' => $imali->balance,
'total' => $total,
'transaction_id' => $request->transaction_id,
'commission' => $request->commission,
'user_id' => $imali->user_id,
'imali_account_id' => $imali->id
]);
//? -----------------INICIO---------------------
$data = new \App\Exports\WalletExport();
$date = date('Y') . date('m') . date('d');
$hours = date('H') . date('i') . date('s');
$fileName = "Transac_iMali_". $date . "-" . $hours . '.csv';
file_put_contents(storage_path('/app/template/'.$fileName),file_get_contents(storage_path('/app/template/template.csv')));
$file = fopen(storage_path('/app/template/'.$fileName), 'a') or die('unable to open file');
foreach ($data->collection() as $key => $value) {
$text = $value['value'.$key]."\n";
fwrite($file, $text);
}
fclose($file);
rename(storage_path('/app/template/'.$fileName), storage_path('/app/downloads/'.$fileName));
$filePath = "/downloads/".$fileName;
$uploadPath = storage_path('app'.$filePath);
if(count($data->collection()) === 0) return print("No data found!");
$filePath=str_replace('\\','/',$uploadPath);
//ENCRIPTAR FICHEIRO
$commands = explode(",","gpg --homedir /home/paytek/.gnupg --recipient lourino.junior@mozabanco.co.mz --encrypt ". $filePath. ","."mv ".$filePath.".gpg"." /var/sftp/uploads_mozabanco/imali_transac_files/".$fileName.".gpg");
foreach($commands AS $command) {
exec($command,$output,$returnDir);
if ($returnDir === 0) {
echo 'Command executed successfully!';
} else {
echo 'Command execution failed.';
}
}
//? actualizar os dados para pending..
foreach ($data->collection() as $key => $value) {
$transacData = explode(",",$value['value'.$key]);
$phoneOrnib=$transacData[0];
$phoneOrnibLength = strlen($phoneOrnib);
if($phoneOrnibLength == 9){
\App\WithdrawalsRequest::query()
->where('phone', $phoneOrnib)
->where('status', 'new')
->update(['status'=>'pending']);
}else if($phoneOrnibLength == 21){
\App\WithdrawalsRequest::query()
->where('nib', $phoneOrnib)
->where('status', 'new')
->update(['status'=>'pending']);
}
}
// return "Done.";
//? ---------------- -FIM---------------------
if($withdrawalls){
return response()->json(['message' => 'Transferencia registada com sucesso!'], 200);
}
// else {
// return response()->json(['message' => 'Erro...'], 400);
// }
}
}