• File: RechargeController.php
  • Full Path: /var/www/amparoapi/app/Http/Controllers/RechargeController.php
  • Date Modified: 10/28/2021 9:02 PM
  • File size: 7.07 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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);
    }
}