arcadiasuite/plus/app/Http/Controllers/RelatorioAdmController.php

321 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Empresa;
use App\Models\AcessoLog;
use App\Models\PlanoEmpresa;
use Dompdf\Dompdf;
use NFePHP\Common\Certificate;
use App\Models\Nfe;
use App\Models\Nfce;
use App\Models\ContaPagar;
use App\Models\ContaReceber;
use App\Models\Produto;
use App\Models\Cliente;
use App\Models\Fornecedor;
class RelatorioAdmController extends Controller
{
public function index()
{
return view('relatorios_adm.index');
}
public function empresas(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$status = $request->status;
$data = Empresa::
when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('created_at', '<=', $end_date);
})
->when($status !== null, function ($q) use ($status) {
return $q->where('status', $status);
})
->get();
$p = view('relatorios_adm.empresas', compact('data'))
->with('title', 'Relatório de Empresas');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Empresas.pdf", array("Attachment" => false));
}
public function historicoAcesso(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$empresa = $request->empresa;
$data = AcessoLog::
when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('acesso_logs.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('acesso_logs.created_at', '<=', $end_date);
})
->when($empresa, function ($query) use ($empresa) {
return $query->where('usuario_empresas.empresa_id', $empresa)
->join('usuario_empresas', 'acesso_logs.usuario_id', '=', 'usuario_empresas.usuario_id');
})
->select('acesso_logs.*')
->get();
$p = view('relatorios_adm.historico_acesso', compact('data'))
->with('title', 'Relatório de Histórico de Acesso');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Histórico de Acesso.pdf", array("Attachment" => false));
}
public function planos(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$data = PlanoEmpresa::
when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_expiracao', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_expiracao', '<=', $end_date);
})
->get();
$p = view('relatorios_adm.planos', compact('data'))
->with('title', 'Relatório de Planos');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Relatório de Planos.pdf", array("Attachment" => false));
}
public function certificados(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
if(!$start_date || !$end_date){
session()->flash("flash_warning", "Informe a data inicial e final!");
return redirect()->back();
}
$empresas = Empresa::all();
$data = [];
$dataHoje = date('Y-m-d');
foreach($empresas as $e){
if($e->arquivo){
try{
$infoCertificado = Certificate::readPfx($e->arquivo, $e->senha);
$publicKey = $infoCertificado->publicKey;
$e->vencimento = $publicKey->validTo->format('Y-m-d');
$e->vencido = strtotime($dataHoje) > strtotime($e->vencimento);
if((strtotime($e->vencimento) > strtotime($start_date)) && (strtotime($e->vencimento) < strtotime($end_date))){
array_push($data, $e);
}
}catch(\Exception $e){
echo $e->getMessage();
}
}
}
usort($data, function($a, $b){
return strtotime($a->vencimento) > strtotime($b->vencimento) ? 1 : 0;
});
$p = view('relatorios_adm.certificados', compact('data'))
->with('title', 'Certificados');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Certificados.pdf", array("Attachment" => false));
}
public function resumoOperacional(Request $request){
$start_date = $request->start_date;
$end_date = $request->end_date;
$status = $request->status;
$empresas = Empresa::
when($status !== null, function ($q) use ($status) {
return $q->where('status', $status);
})
->orderBy('nome')
// ->limit(1)
->get();
$data = [];
foreach($empresas as $e){
$contaAcessos = AcessoLog::
when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('acesso_logs.created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('acesso_logs.created_at', '<=', $end_date);
})
->where('usuario_empresas.empresa_id', $e->id)
->join('usuario_empresas', 'acesso_logs.usuario_id', '=', 'usuario_empresas.usuario_id')
->select('acesso_logs.*')
->count();
$vendas = Nfe::where('empresa_id', $e->id)
->where('tpNF', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('created_at', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_vendas, SUM(total) as soma_vendas')
->first();
$somaVendas = $vendas->soma_vendas ?? 0;
$contaVendas = $vendas->total_vendas ?? 0;
$vendas = Nfce::
where('empresa_id', $e->id)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('created_at', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('created_at', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_vendas, SUM(total) as soma_vendas')
->first();
$somaVendas += $vendas->soma_vendas ?? 0;
$contaVendas += $vendas->total_vendas ?? 0;
$compras = Nfe::where('empresa_id', $e->id)
->where('tpNF', 0)
->when($start_date && $end_date, function ($query) use ($start_date, $end_date) {
return $query->whereBetween('created_at', [$start_date, $end_date]);
})
->selectRaw('COUNT(*) as total_compras, SUM(total) as soma_compras')
->first();
$contasRecebidas = ContaReceber::
where('empresa_id', $e->id)
->where('status', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_contas, SUM(valor_recebido) as soma_contas')
->first();
$contasReceber = ContaReceber::
where('empresa_id', $e->id)
->where('status', 0)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_contas, SUM(valor_integral) as soma_contas')
->first();
$contasPagas = ContaPagar::
where('empresa_id', $e->id)
->where('status', 1)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_contas, SUM(valor_pago) as soma_contas')
->first();
$contasPagar = ContaPagar::
where('empresa_id', $e->id)
->where('status', 0)
->when(!empty($start_date), function ($query) use ($start_date) {
return $query->whereDate('data_vencimento', '>=', $start_date);
})
->when(!empty($end_date), function ($query) use ($end_date) {
return $query->whereDate('data_vencimento', '<=', $end_date);
})
->selectRaw('COUNT(*) as total_contas, SUM(valor_integral) as soma_contas')
->first();
$data[] = (object)[
'empresa' => $e->nome,
'cpf_cnpj' => $e->cpf_cnpj,
'endereco' => $e->endereco,
'celular' => $e->celular,
'contador_acessos' => $contaAcessos,
'contador_vendas' => $contaVendas,
'soma_vendas' => $somaVendas,
'contador_compras' => $compras->total_compras ?? 0,
'soma_compras' => (float)$compras->soma_compras ?? 0,
'contador_conta_recebidas' => $contasRecebidas->total_contas ?? 0,
'soma_conta_recebidas' => (float)$contasRecebidas->soma_contas ?? 0,
'contador_conta_receber' => $contasReceber->total_contas ?? 0,
'soma_conta_receber' => (float)$contasReceber->soma_contas ?? 0,
'contador_conta_pagas' => $contasPagas->total_contas ?? 0,
'soma_conta_pagas' => (float)$contasPagas->soma_contas ?? 0,
'contador_conta_pagar' => $contasPagar->total_contas ?? 0,
'soma_conta_pagar' => (float)$contasPagar->soma_contas ?? 0,
];
}
$p = view('relatorios_adm.resumo_operacional', compact('data', 'start_date', 'end_date'))
->with('title', 'Resumo Operacional');
$domPdf = new Dompdf(["enable_remote" => true]);
$domPdf->loadHtml($p);
$pdf = ob_get_clean();
$domPdf->setPaper("A4", "landscape");
$domPdf->render();
$domPdf->stream("Resumo Operacional.pdf", array("Attachment" => false));
}
}