• File: DashboardController.php
  • Full Path: /var/www/imalipartnersapi/app/Http/Controllers/DashboardController.php
  • Date Modified: 02/07/2023 8:01 PM
  • File size: 8.6 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers;

use App\Admin;
use App\Bank\Payment;
use App\Bank\Profit;
use App\Credelec;
use App\Imali\ImaliAccount;
use App\Imali\ImaliAccountConfig;
use App\Imali\MerchantAccount;
use App\Imali\RechargeImaliAccount;
use App\Imali\Transfer;
use App\Log;
use App\PurchaseVoucher;
use App\SmsLog;
use App\Store;
use App\TransferHistory;
use App\Water;
use Carbon\Carbon;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    public function getPayments($datainicial, $datafinal)
    {

        if ($datainicial === $datafinal) {
            $payments = Payment::query()->join('users', 'users.id', '=', 'payments.sender_id')
//                ->join('merchant_accounts', 'merchant_accounts.id', 'payments.merchant_account_id')
                ->join('stores', 'stores.id', 'payments.store_id')
                ->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
                ->orderBy('payments.created_at', 'desc')
                ->whereDate('payments.created_at', $datafinal)
                ->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);
        } else {
            $payments = Payment::query()->join('users', 'users.id', '=', 'payments.sender_id')
//                ->join('merchant_accounts', 'merchant_accounts.id', 'payments.merchant_account_id')
                ->join('stores', 'stores.id', 'payments.store_id')
                ->join('imali_accounts', 'imali_accounts.user_id', 'payments.sender_id')
                ->orderBy('payments.created_at', 'desc')
//                ->whereBetween('payments.created_at', [$datainicial, $datafinal])
                ->whereDate('payments.created_at', '>=', $datainicial)
                ->whereDate('payments.created_at', '<=', $datafinal)
                ->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 getTransferencias($datainicial, $datafinal)
    {
        if ($datainicial === $datafinal) {
            $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')
                ->whereDate('transfers.created_at', $datafinal)
                ->select('transfers.*', 'users.name as sender_name', 'imali_accounts.account_number as sender_account')
                ->get();
            return response()->json(['data' => $transfers], 200);
        } else {
            $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')
                ->whereDate('transfers.created_at', '>=', $datainicial)
                ->whereDate('transfers.created_at', '<=', $datafinal)
                ->select('transfers.*', 'users.name as sender_name', 'imali_accounts.account_number as sender_account')
                ->get();
            return response()->json(['data' => $transfers], 200);
        }

    }

    public function getImaliConfiguracoes()
    {
        $acount = ImaliAccountConfig::all();

        return response()->json(['data' => $acount], 200);
    }

    public function getCarregamentos($datainicial, $datafinal)
    {
        if ($datainicial === $datafinal) {
            $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')
                ->whereDate('recharge_imali_accounts.created_at', $datafinal)
                ->select('users.name as user_name', 'imali_accounts.account_number as user_account', 'recharge_imali_accounts.*')->get();

            return response()->json(['data' => $carregamento], 200);

        } else {
            $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')
//                ->whereBetween('recharge_imali_accounts.created_at', [$datainicial, $datafinal])
                ->whereDate('recharge_imali_accounts.created_at', '>=', $datainicial)
                ->whereDate('recharge_imali_accounts.created_at', '<=', $datafinal)
                ->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 getIndicadores()
    {
        $balance = ImaliAccount::query()->sum('balance');

        $pontos = ImaliAccount::query()->sum('points');

        $configImali = ImaliAccountConfig::find(1);

        $pontosCorrespondemEmMetical = $configImali->point_value;

        $coresponde = ($pontos * 1) / $pontosCorrespondemEmMetical;

        $comercianteBalance = Payment::query()
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('amount_credited');

        $lucros = Profit::query()
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('comissao');

        $transferencias = Transfer::query()
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('amount');

        $adminusers = Admin::query()
            ->count();

        $recharges = RechargeImaliAccount::query()
            ->count();

        $merchants = MerchantAccount::query()
            ->count();
        $stores = Store::query()
            ->count();

        $logs = Log::query()->count();

        $imaliacounts = ImaliAccount::query()->count();

        $payments = Payment::query()->count();


        // TOPUP
        $voucherTv = PurchaseVoucher::query()
            ->where('type', '=', 'Tv')
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('vouchervalue');

        $voucherRecarga = PurchaseVoucher::query()
            ->where('type', '=', 'recarga')
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('vouchervalue');

        $water = Water::query()
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('purchaseValue');

        $credelec = Credelec::query()
            ->whereDate('created_at', date('Y-m-d'))
            ->sum('amount');

        $smsLog = SmsLog::find(1);


        $sms = 0;

        if ($smsLog) {
            $sms = $smsLog->balance;
        }

        return response()->json([
            'balanceWallets2' => number_format((float)$balance, 2),
            'balanceWallets' => $balance,
            'balanceMerchants2' => number_format((float)$comercianteBalance, 2),
            'balanceMerchants' => $comercianteBalance,
            'profits2' => number_format((float)$lucros, 2),
            'profits' => $lucros,
            'totalPoints' => $pontos,
            'totalTransfers2' => number_format((float)$transferencias, 2),
            'totalTransfers' => $transferencias,
            'pointsToMetical2' => number_format((float)$coresponde, 2),
            'pointsToMetical' => $coresponde,
            'users' => $adminusers,
            'recharges' => $recharges,
            'merchants' => $merchants,
            'stores' => $stores,
            'logs' => $logs,
            'imali_accounts' => $imaliacounts,
            'payments' => $payments,
            'voucher' => $voucherRecarga,
            'tv' => $voucherTv,
            'water' => $water,
            'credelec' => $credelec,
            'sms' => $sms
        ], 200);
    }

    public function updateImaliAccountConfig(Request $request)
    {
        $config = ImaliAccountConfig::find($request->id);

        if ($config) {
            $update = $config->update($request->all());

            if ($update) {
                return response()->json(['message' => 'Kyc Actualizado com Sucesso!'], 200);
            }
        }
    }

    public function getMyStatics()
    {
        $data = Payment::query()
            ->get();

        return response()->json(['data' => $data]);
    }

    public function getStatistics()
    {

    }
}