<?php
namespace App\Http\Controllers;
use App\Models\CustomerAccount;
use App\Models\CustomerCard;
use App\Models\Recharge;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;
class RechargeController extends Controller
{
protected $card;
protected $card2;
protected $account;
protected $request;
protected $recharge;
protected $existe;
public function __construct(Request $request)
{
$this->request = $request;
}
public function rechargeAccountOrCard(Request $request)
{
$this->validate($request, [
'amount' => 'required',
'account_number' => 'required',
'recharge_form' => 'required'
]);
$card = CustomerCard::query()->where('card_number', $request->account_number)->first();
$account = CustomerAccount::query()->where('account_number', $request->account_number)->first();
$this->account = $account;
$this->card = $card;
if ($request->recharge_form == 'individual') {
if ($this->card || $this->account) {
DB::transaction(function () {
if ($this->card) {
$this->recharge = Recharge::create([
'transaction' => str_replace('-', '', Uuid::uuid4()),
'amount' => $this->request->amount,
'last_balance' => $this->card->card_balance,
'balance' => $this->request->amount + $this->card->card_balance,
'recharge_way' => 'Agente Amparo',
'recharge_type' => 'card',
'customer_card_id' => $this->card->id,
'user_id' => $this->request->user()->id
]);
DB::table('customer_cards')->where('id', $this->card->id)->increment('card_balance', $this->request->amount);
DB::table('customer_accounts')->where('id', $this->card->customer_account_id)->increment('balance_cards', $this->request->amount);
return response()->json(['message' => 'Carregamento Feito Com Sucesso!']);
}
if ($this->account) {
$this->recharge = Recharge::create([
'transaction' => str_replace('-', '', Uuid::uuid4()),
'amount' => $this->request->amount,
'balance' => $this->request->amount + $this->account->balance,
'last_balance' => $this->account->balance,
'recharge_way' => 'Agente Amparo',
'recharge_type' => 'account',
'customer_account_id' => $this->account->id,
'user_id' => $this->request->user()->id
]);
DB::table('customer_accounts')->where('id', $this->account->id)->increment('balance', $this->request->amount);
return response()->json(['message' => 'Carregamento Feito Com Sucesso!']);
}
});
} else {
return response()->json(['message' => 'Conta não encontrada!'], 400);
}
}
if ($request->recharge_form == 'massive') {
if ($account) {
$cards = CustomerCard::query()
->where('card_type_id', $request->card_type_id)
// ->where('customer_account_id', $card->id)
->where('customer_account_id', $account->id)
->get();
// return response()->json($cards);
foreach ($cards as $card) {
$this->card2 = $card;
DB::transaction(function () {
if ($this->card2) {
$this->recharge = Recharge::create([
'transaction' => str_replace('-', '', Uuid::uuid4()),
'amount' => $this->request->amount,
'last_balance' => $this->card2->card_balance,
'balance' => $this->request->amount + $this->card2->card_balance,
'recharge_way' => 'Agente Amparo',
'recharge_type' => 'card',
'customer_card_id' => $this->card2->id,
'user_id' => $this->request->user()->id
]);
DB::table('customer_cards')->where('id', $this->card2->id)->increment('card_balance', $this->request->amount);
DB::table('customer_accounts')->where('id', $this->card2->customer_account_id)->increment('balance_cards', $this->request->amount);
// return response()->json(['message' => 'Carregamento Feito Com Sucesso!']);
}
// if ($this->account) {
// $this->recharge = Recharge::create([
// 'transaction' => str_replace('-', '', Uuid::uuid4()),
// 'amount' => $this->request->amount,
// 'balance' => $this->request->amount + $this->account->balance,
// 'last_balance' => $this->account->balance,
// 'recharge_way' => 'Agente Amparo',
// 'recharge_type' => 'account',
// 'customer_account_id' => $this->account->id,
// 'user_id' => $this->request->user()->id
// ]);
//
// DB::table('customer_accounts')->where('id', $this->account->id)->increment('balance', $this->request->amount);
// return response()->json(['message' => 'Carregamento Feito Com Sucesso!']);
// }
});
}
} else {
return response()->json(['message' => 'Número de Conta Inválido!'], 400);
}
}
if ($this->recharge) {
return response()->json(['message' => 'Carregamento Feito Com Sucesso!'], 200);
}
}
public function getRecharges() {
$data = Recharge::query()
->leftJoin('customer_accounts', 'customer_accounts.id', '=', 'recharges.customer_account_id')
->leftJoin('customer_cards', 'customer_cards.id', '=', 'recharges.customer_card_id')
->join('users', 'users.id', '=', 'recharges.user_id')
->select('recharges.*', 'users.name as operator_name', 'customer_cards.card_number', 'customer_accounts.account_number', 'customer_cards.username as titular_card_name',
'customer_cards.phone_number as titular_card_phone_number', 'customer_accounts.name as account_name')
->orderByDesc('recharges.created_at')
->get();
return response()->json(['data' => $data], 200);
}
}