<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Relatorios extends CI_Controller
{

    private $modelPagina = 'relatorios_model';

    function __construct() {
        parent::__construct();
        $this->load->helper(get_helpers_paginas());
        ValidacaoUtils::verificarLoginUtils($this->session);
        ValidacaoUtils::nivelTemAcessoPermitido($this->session->userdata('nivel'), $this->router->class);
        ValidacaoUtils::carregarModelsPagina(array($this->modelPagina, 'servicos_model', 'agenda_model', 'servicos_model', 'manutencao_model'), $this);

    }

    public function isLogado() {
        $this->load->helper(get_helpers_paginas());
        ValidacaoUtils::verificarLoginUtils($this->session);
    }

    public function manutencao() {
        $this->data['resultscomboFuncionarios'] = $this->agenda_model->get('tbl_002_notas','');
        $this->data['view'] = 'sistema/relatorios/relatorioManutencao';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function servicos() {
        $this->data['resultscomboFuncionarios'] = $this->agenda_model->get('tbl_010_funcionario','');
        $this->data['view'] = 'sistema/relatorios/relatorioServicos';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function pecas() {
        $this->data['resultscomboFuncionarios'] = $this->agenda_model->get('tbl_010_funcionario','');
        $this->data['view'] = 'sistema/relatorios/relatorioPecas';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function prestacaoContas() {
        $this->data['view'] = 'sistema/relatorios/prestacaoContas';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function ocorrencias() {
        $this->data['view'] = 'sistema/relatorios/ocorrencia';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function notificacao() {
        $this->data['view'] = 'sistema/relatorios/notificacao';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function moradores() {
        $this->data['view'] = 'sistema/relatorios/moradores';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function financeiro() {
        $this->data['view'] = 'sistema/relatorios/imprimir/financeiro';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function funcionarios() {
        $this->data['view'] = 'sistema/relatorios/funcionarios';
        $this->load->view(DadosPaginas::PG_TOPO_SISTEMA, $this->data);
    }

    public function visualizarTodasNotasMesCorrente() {
        $mes = urldecode($this->uri->segment(3));
        $this->data['manutencoes'] = $this->manutencao_model->getNotasMesCorrente();
        $this->data['view'] = 'sistema/relatorios/imprimir/imprimirManutencao';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarTodasNotasFiltro() {
        $mes = urldecode($this->uri->segment(3));

        $situacaoNota =  $this->input->post('situacaoNota');
        $nomeVendedor = preg_replace('/[`^~\'"]/', '', $this->input->post('nomeVendedor'));
        $nomeCliente = preg_replace('/[`^~\'"]/', '', $this->input->post('nomeCliente'));
        $P_Dia = date($this->input->post('dataInicial'));
        $U_Dia = date($this->input->post('dataFinal'));
        $ultimo_ano = 'DT_NOTA BETWEEN "'.$P_Dia.'" AND "'.$U_Dia.'"';

        $this->db->where($ultimo_ano);
        empty($nomeCliente)?'': $this->db->like('CLIENTE_ID', $nomeCliente);
        
        if($situacaoNota != "Todos"){
            $situacaoNota == 'Q'?$this->db->where('DT_QUITADO IS NOT NULL'): $this->db->where('DT_QUITADO IS NULL');
        }
        
        empty($nomeVendedor)?'': $this->db->where('NM_VENDEDOR', $nomeVendedor);


        $this->data['manutencoes'] = $this->manutencao_model->getNotasFiltro();
        $this->data['view'] = 'sistema/relatorios/imprimir/imprimirManutencao';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarNotaPorID() {
        $this->data['nota'] = $this->manutencao_model->getNotaPorID(urldecode($this->uri->segment(3)));
        $this->data['view'] = 'sistema/relatorios/imprimir/reciboPedido';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarPecas() {
        $this->data['pecasPorPreventiva'] = $this->manutencao_model->getPecasPorPreventivaEVeiculos();
        $this->data['view'] = 'sistema/relatorios/imprimir/imprimirPecas';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarOcorrenciasMes() {
        $mes = urldecode($this->uri->segment(3));
        $mesConsulta = $mes;

        $this->data['ocorrencias'] = $this->relatorios_model->ocorrenciasModelMes($mesConsulta);

        $this->data['view'] = 'sistema/relatorios/imprimir/todasOcorrencias';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }


    public function visualizarOcorrenciasMesAtual() {
        $this->data['ocorrencias'] = $this->relatorios_model->ocorrenciasModelMesAtual();

        $this->data['view'] = 'sistema/relatorios/imprimir/todasOcorrencias';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }


    public function visualizarNotificaoMes() {
        $mes = urldecode($this->uri->segment(3));
        $mesConsulta = $mes;

        $this->data['notificacao'] = $this->relatorios_model->notificacaoModelMes($mesConsulta);

        $this->data['view'] = 'sistema/relatorios/imprimir/todosNotificacao';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarNotificaoMesAtual() {
        $this->data['notificacao'] = $this->relatorios_model->notificaoModelMesAtual();

        $this->data['view'] = 'sistema/relatorios/imprimir/todosNotificacao';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarMoradores() {
        $this->data['morador'] = $this->relatorios_model->relatorioMoradores('morador', $this->parametrosConsultaMorador());
        $this->data['view'] = 'sistema/relatorios/imprimir/todosMoradores';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarMoradoresDetalhados() {
        $moradores = $this->relatorios_model->relatorioMoradores('morador', $this->parametrosConsultaMorador());
        foreach ($moradores as $morador){
            $where = 'morador_id = '.$morador->idMorador;
            $veiculos = $this->relatorios_model->relatorioGeral('veiculomorador',$where, 'ano');
            $familiares= $this->relatorios_model->relatorioGeral('familiaresmorador',$where, 'parentesco');
            if(!empty($veiculos)){
                $morador->{'veiculos'} = (Object)$veiculos;
            }
            if(!empty($familiares)){
                $morador->{'familiares'} = (Object) $familiares;
            }
        }
        $this->data['moradores'] = $moradores;

        $this->data['view'] = 'sistema/relatorios/imprimir/todosMoradoresDetalhado';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function parametrosConsultaMorador() {
        $relacao = preg_replace('/[`^~\'"]/', '', $this->input->get('relacao'));
        $bloco = preg_replace('/[`^~\'"]/', '', $this->input->get('bloco'));

        if (!empty($relacao)) {
            $this->db->like('relacaoImovel', $relacao);
        } if (!empty($bloco)) {
            $this->db->like('blocoApartamento', $bloco);
        }
    }

    public function visualizarFinanceiro() {

        $tipo = $this->input->post('tipo');
        $situacao = $this->input->post('situacao');
        $categoria = $this->input->post('categoria');

        $dataInicial = $this->input->post('dataInicial');
        $dataFinal = $this->input->post('dataFinal');

        $this->data['lancamentos'] = $this->relatorios_model->financeiroCustom($dataInicial, $dataFinal, $tipo, $situacao, $categoria);
        $this->data['view'] = 'sistema/relatorios/imprimir/todosFinanceiros';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarFuncionarios() {
        $where = '';
        $funcao = urldecode($this->input->get('funcao'));
        if ($funcao != null) {
            $where = 'funcao = "' . $funcao . '"';
        }
        $this->data['funcionarios'] = $this->relatorios_model->relatorioFuncionarios('funcionario', $where);
        $this->data['view'] = 'sistema/relatorios/imprimir/todosFuncionarios';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarTodosMoradores() {
        $this->data['morador'] = $this->relatorios_model->relatorioGeral('morador',null, 'blocoApartamento');
        $this->data['view'] = 'sistema/relatorios/imprimir/todosMoradores';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }
    public function visualizarTodosMoradoresDetalhado() {
        $moradores = $this->relatorios_model->relatorioGeral('morador',null, 'blocoApartamento');
        foreach ($moradores as $morador){
            $where = 'morador_id = '.$morador->idMorador;
            $veiculos = $this->relatorios_model->relatorioGeral('veiculomorador',$where, 'ano');
            $familiares= $this->relatorios_model->relatorioGeral('familiaresmorador',$where, 'parentesco');
            if(!empty($veiculos)){
                $morador->{'veiculos'} = (Object)$veiculos;
            }
            if(!empty($familiares)){
                $morador->{'familiares'} = (Object) $familiares;
            }
        }
        $this->data['moradores'] = $moradores;
        $this->data['view'] = 'sistema/relatorios/imprimir/todosMoradoresDetalhado';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarTodosFuncionarios() {
        $this->data['funcionarios'] = $this->relatorios_model->relatorioGeral('funcionario', 'funcao');
        $this->data['view'] = 'sistema/relatorios/imprimir/todosFuncionarios';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarTodosFinanceirosMesAtual() {
        $this->data['lancamentos'] = $this->relatorios_model->relatorioFinanceiroMesAtual();
        $this->data['view'] = 'sistema/relatorios/imprimir/todosFinanceiros';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarAniversariantesMes() {
        $mes = urldecode($this->uri->segment(3));
        $mesConsulta = date('Y-' . $mes . '-01');

        $this->data['morador'] = $this->relatorios_model->moradoresAniversariosMes($mesConsulta);
        $this->data['funcionario'] = $this->relatorios_model->funcionarioAniversariosMes($mesConsulta);
        $this->data['view'] = 'sistema/relatorios/imprimir/aniversariantes';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarPrestacaoContasMes() {
        $mes = urldecode($this->uri->segment(3));
        $ano = urldecode($this->uri->segment(4));

        $this->data['financeiro'] = $this->relatorios_model->PCfinanceiroMesAtual($mes, $ano);
        $this->data['notificao'] = $this->relatorios_model->PCNotificacaoMesAtual($mes, $ano);
        $this->data['advertencia'] = $this->relatorios_model->PCAdvertenciaMesAtual($mes, $ano);
        $this->data['multa'] = $this->relatorios_model->PCMultaMesAtual($mes, $ano);
        $this->data['ocorrencia'] = $this->relatorios_model->PCOcorrenciaMesAtual($mes, $ano);

        $this->data['view'] = 'sistema/relatorios/imprimir/prestacaoContas';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function visualizarPrestacaoContasMesAtual() {

        $this->data['financeiro'] = $this->relatorios_model->PCMfinanceiroMesAtual();
        $this->data['notificao'] = $this->relatorios_model->PCMNotificacaoMesAtual();
        $this->data['advertencia'] = $this->relatorios_model->PCMAdvertenciaMesAtual();
        $this->data['multa'] = $this->relatorios_model->PCMMultaMesAtual();
        $this->data['ocorrencia'] = $this->relatorios_model->PCMOcorrenciaMesAtual();

        $this->data['view'] = 'sistema/relatorios/imprimir/prestacaoContas';
        $this->load->view(DadosPaginas::PG_TOPO_RELATORIO, $this->data);
    }

    public function financeiroCustom() {

        $whereTipo = "";
        $whereSituacao = "";

        if ($dataInicial == null) {
            $dataInicial = date('Y-m-01');
        }
        if ($dataFinal == null) {
            $dataFinal = date("Y-m-t");
        }

        if ($tipo == 'receita') {
            $whereTipo = "AND tipo = 'receita'";
        }
        if ($tipo == 'despesa') {
            $whereTipo = "AND tipo = 'despesa'";
        }
        if ($situacao == 'pendente') {
            $whereSituacao = "AND baixado = 0";
        }
        if ($situacao == 'pago') {
            $whereSituacao = "AND baixado = 1";
        }


        $query = "SELECT * FROM lancamendtos WHERE data_vencimento BETWEEN ? and ? $whereTipo $whereSituacao";
        return $this->db->query($query, array($dataInicial, $dataFinal))->result();
    }

}