src/Controller/ContaBancariaController.php line 57
<?php
namespace App\Controller;
use App\Entity\ContaBancaria;
use App\Entity\ContaBancariaMovimentacao;
use App\Form\ContaBancariaType;
use App\Repository\ContaBancariaRepository;
use App\Repository\ContaBancariaMovimentacaoRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Dompdf\Dompdf;
#[Route('/conta/bancaria')]
class ContaBancariaController extends AbstractController {
/**
* @IsGranted("ROLE_ADMIN")
*/
#[Route('/', name: 'app_conta_bancaria_index', methods: ['GET'])]
public function index(ContaBancariaRepository $contaBancariaRepository, Request $request): Response {
$filter['tipo'] = $request->get('tipo') ?: '';
$filter['descricao'] = $request->get('descricao') ?: '';
$filter['pagina'] = $request->get('pagina') ?: 1;
$filter['anterior'] = $this->verifica('anterior', (1 - $filter['pagina']));
$filter['primeira'] = 1;
$filter['total_registros'] = $contaBancariaRepository->filterGridTotal($filter);
$filter['page'] = $request->get('page') ?: 10;
$filter['ultima'] = $this->verifica('ultima', $filter['total_registros'],$filter['page']);
$filter['proxima'] = $this->verifica('proxima', (1 + $filter['pagina']), $filter['ultima']);
$filter['dataInicial'] = '';
$filter['dataFinal'] = '';
$ano = date('Y');
for($i=2018; $i <= $ano;$i++){
$anos[] = $i;
}
return $this->render('conta_bancaria/index.html.twig', [
'filtro' => $filter,
'contas' => $contaBancariaRepository->filterGrid($filter),
'anos' => $anos
]);
}
#[Route('/contas/ano', name: 'app_conta_bancaria_publico_ano', methods: ['GET'])]
public function conta_ano(ContaBancariaRepository $contaBancariaRepository, Request $request): Response {
$lista = $contaBancariaRepository->getAnos();
return $this->render('conta_bancaria/ano.html.twig', [
'itens' => $lista,
]);
}
#[Route('/contas/mes', name: 'app_conta_bancaria_publico_mes', methods: ['GET'])]
public function conta_mes(ContaBancariaRepository $contaBancariaRepository, Request $request): Response {
$ano = $request->get('ano')?: date('Y');
$lista = $contaBancariaRepository->getMes($ano);
return $this->render('conta_bancaria/mes.html.twig', [
'itens' => $lista,
'ano' => $ano,
]);
}
#[Route('/contas', name: 'app_conta_bancaria_publico', methods: ['GET'])]
public function conta(ContaBancariaRepository $contaBancariaRepository, Request $request): Response {
$filter['ano'] = $request->get('ano')?: date('Y');
$filter['mes'] = $request->get('mes')?: date('m');
$filter['tipo'] = $request->get('tipo') ?: '';
$filter['descricao'] = $request->get('descricao') ?: '';
$filter['pagina'] = $request->get('pagina') ?: 1;
$filter['anterior'] = $this->verifica('anterior', (1 - $filter['pagina']));
$filter['primeira'] = 1;
$filter['total_registros'] = $contaBancariaRepository->filterGridTotal($filter);
$filter['page'] = $request->get('page') ?: 10;
$filter['ultima'] = $this->verifica('ultima', $filter['total_registros'],$filter['page']);
$filter['proxima'] = $this->verifica('proxima', (1 + $filter['pagina']), $filter['ultima']);
$filter['page'] = $request->get('page') ?: 10;
$filter['dataInicial'] = '';
$filter['dataFinal'] = '';
if ($request->get('impressao')) {
$filter['page'] = 'all';
if ($request->get('pdf')) {
$html = $this->renderView('conta_bancaria/impressao_pdf.html.twig', [
'filtro' => $filter,
'contas' => $contaBancariaRepository->filterGrid($filter),
]);
$dompdf = new Dompdf();
$dompdf->setPaper('A4', 'landscape');
$dompdf->set_option("isPhpEnabled", true);
$options = $dompdf->getOptions();
$options->setDefaultFont('Courier');
$dompdf->setOptions($options);
$dompdf->loadHtml($html);
$dompdf->render();
return new Response(
$dompdf->stream('resume', ["Attachment" => false]),
Response::HTTP_OK,
['Content-Type' => 'application/pdf']
);
}elseif($request->get('excel')){
$lista =$contaBancariaRepository->filterGrid($filter);
$titulos = array("Ano","MES","AGENCIA","CONTA","ENTRADA","SAIDA","SALDO INICIAL", "SALDO FINAL","FINALIDADE");
$rows[] = implode(';', $titulos);
foreach ($lista as $value) {
$data = array($value->getAno(), $value->getMes() , $value->getAgencia(), $value->getConta(),$value->getEntrada(),$value->getSaida(),$value->getSaldoInicial() , $value->getSaldoFinal(),$value->getDescricao());
$rows[] = implode(';', $data);
}
$content = implode("\n", $rows);
$response = new Response($content);
$response->headers->set('Content-Type', 'text/csv');
return $response;
}else{
return $this->render('conta_bancaria/impressao.html.twig', [
'filtro' => $filter,
'contas' => $contaBancariaRepository->filterGrid($filter),
]);
}
}
return $this->render('conta_bancaria/conta_bancaria.html.twig', [
'filtro' => $filter,
'contas' => $contaBancariaRepository->filterGrid($filter),
]);
}
private function verifica($str, $pagina, $page = null) {
if ($str == "anterior") {
if ($pagina < 1) {
return 1;
}
}
if ($str == "proxima") {
if ($pagina > $page) {
return $page;
}
return $pagina;
}
if ($str == "ultima") {
if($page == "all"){
$page = $pagina;
}
$valor = intdiv($pagina, $page);
if (($pagina % $page) > 0) {
return ++$valor;
} else {
return $valor;
}
}
}
/**
* @IsGranted("ROLE_ADMIN")
*/
#[Route('/new', name: 'app_conta_bancaria_new', methods: ['GET', 'POST'])]
public function new(Request $request, ContaBancariaRepository $contaBancariaRepository): Response {
$contaBancarium = new ContaBancaria();
$form = $this->createForm(ContaBancariaType::class, $contaBancarium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contaBancariaRepository->save($contaBancarium, true);
return $this->redirectToRoute('app_conta_bancaria_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('conta_bancaria/new.html.twig', [
'conta_bancarium' => $contaBancarium,
'form' => $form,
]);
}
/**
* @IsGranted("ROLE_ADMIN")
*/
#[Route('/{id}/edit', name: 'app_conta_bancaria_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, ContaBancaria $contaBancarium, ContaBancariaRepository $contaBancariaRepository): Response {
$form = $this->createForm(ContaBancariaType::class, $contaBancarium);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contaBancariaRepository->save($contaBancarium, true);
return $this->redirectToRoute('app_conta_bancaria_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('conta_bancaria/edit.html.twig', [
'conta_bancarium' => $contaBancarium,
'form' => $form,
]);
}
/**
* @IsGranted("ROLE_ADMIN")
*/
#[Route('/{id}', name: 'app_conta_bancaria_delete', methods: ['POST'])]
public function delete(Request $request, ContaBancaria $contaBancarium, ContaBancariaRepository $contaBancariaRepository, ContaBancariaMovimentacaoRepository $contaBancariaMovimentacaoRepository): Response {
if ($this->isCsrfTokenValid('delete' . $contaBancarium->getId(), $request->request->get('_token'))) {
$contaBancariaRepository->remove($contaBancarium, true);
}
return $this->redirectToRoute('app_conta_bancaria_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @IsGranted("ROLE_ADMIN")
*/
#[Route('/importar/dados', name: 'app_conta_bancaria_inport', methods: ['POST'])]
public function import(Request $request, ContaBancariaRepository $contaRepository, ContaBancariaMovimentacaoRepository $contaBancariaMovimentacaoRepository): Response {
$ano = $request->get('ano');
$mes = $request->get('mes');
$ultimo_dia = date("t", mktime(0, 0, 0, $mes, '01', $ano));
$inicial = $ano . "-" . $mes . "-01";
$final = $ano . "-" . $mes . "-" . $ultimo_dia;
$mes_extenso = "";
switch ($mes) {
case "01" : $mes_extenso = "JANEIRO";
break;
case "02" : $mes_extenso = "FEVEREIRO";
break;
case "03" : $mes_extenso = "MARÇO";
break;
case "04" : $mes_extenso = "ABRIL";
break;
case "05" : $mes_extenso = "MAIO";
break;
case "06" : $mes_extenso = "JUNHO";
break;
case "07" : $mes_extenso = "JULHO";
break;
case "08" : $mes_extenso = "AGOSTO";
break;
case "09" : $mes_extenso = "SETEMBRO";
break;
case "10" : $mes_extenso = "OUTUBRO";
break;
case "11" : $mes_extenso = "MOVEMBRO";
break;
case "12" : $mes_extenso = "DEZEMBRO";
break;
}
if($contaRepository->findOneBy(array('mes'=>$mes_extenso,'ano'=>$ano)) != NULL){
$this->addFlash('errors', "O MÊS DE " . $mes_extenso . " DO ANO $ano JÁ FOI IMPORTADO ANTERIORMENTE.");
return $this->redirectToRoute('app_conta_bancaria_index', [], Response::HTTP_SEE_OTHER);
}
$url = "http://143.255.241.145:8000/api/accounts/?institution=1&initial_date=" . $inicial . "&final_date=" . $final;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$lista = json_decode(curl_exec($ch), true);
curl_close($ch);
$contador = 0;
if (is_array($lista)) {
$contador = count($lista);
foreach ($lista as $item) {
$conta = new ContaBancaria();
$conta->setAdministracao($item["administracao"]);
$conta->setAgencia($item["agencia"] . "-" . $item["dv_agencia"]);
// $conta->setAgenciaDv($item["dv_agencia"]);
$conta->setAno($item["ano"]);
$conta->setConta($item["conta"] . "-" . $item["dv_conta"]);
// $conta->setContaDv($item["dv_conta"]);
$conta->setCodigo($item["id"]);
$conta->setDescricao($item["descricao"]);
$conta->setEntrada($item["entradas_mes"]);
$conta->setMes($mes_extenso);
$conta->setSaida($item["saidas_mes"]);
$conta->setSaldoFinal($item["saldo_final_mes"]);
$conta->setSaldoInicial($item["saldo_inicial_mes"]);
$contaRepository->save($conta, false);
}
}
$url_movimentacao = "http://143.255.241.145:8000/api/accounts/moviments?institution=1&initial_date=" . $inicial . "&final_date=" . $final;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_movimentacao);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$listaMov = json_decode(curl_exec($ch), true);
curl_close($ch);
if (is_array($listaMov)) {
foreach ($listaMov as $itemMov) {
$mov = new ContaBancariaMovimentacao();
$mov->setTipo($itemMov['tipo_movimentacao']);
$mov->setTipoDescricao($itemMov['tipo_entrada_saida']);
$mov->setDescricao($itemMov['descr_movimentacao']);
$mov->setValor($itemMov['valor_entra_saida']);
$mov->setData(date_create($itemMov['data_movimentacao']));
$mov->setCodigo($itemMov["id_conta"]);
$mov->setMes($mes_extenso);
$mov->setAno($ano);
$contaBancariaMovimentacaoRepository->save($mov, false);
}
}
$contaBancariaMovimentacaoRepository->flush();
if($contador == 0){
$this->addFlash('warning', "NENHUM REGISTRO REF. AO MÊS DE ". $mes_extenso ." FOI IMPORTADO.");
}else{
$this->addFlash('success', "REGISTROS REF. AO MÊS DE ". $mes_extenso ." FORAM IMPORTADOS COM SUCESSO.");
}
return $this->redirectToRoute('app_conta_bancaria_index', [], Response::HTTP_SEE_OTHER);
}
}