RamonSilva20 / mapos

Sistema de Controle de Ordens de Serviço
http://mapos.com.br
Apache License 2.0
899 stars 613 forks source link

Gerar Recibo em Financeiro #1015

Closed visaotec closed 3 years ago

visaotec commented 4 years ago

Olá parceiros tudo bem Em financeiro devido a necessidade de gerar um recibo tanto pra despesa ou receita, porque as vezes o cliente paga e quer o recibo... então pensando nisso estou colocando a opção de Recibo que vai imprimir em PDF pegando os dados em Lançamentos. logo logo vou deixar os códigos aqui .

projeto projeto 02 projeto 03

acinformatica2004 commented 4 years ago

Muito bom, parabéns!

visaotec commented 4 years ago

Vamos lá... 1º na tabela lançamentos no BD crie quatro campos que são eles:

cpf | varchar(20) ruaLanc | varchar(70) bairroLanc | varchar(50) cidadeLanc | varchar(20)

em controllers/Financeiro.php em "adicionar receita" cole o seguinte codigo

public function adicionarReceita()
    {
        if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'aLancamento')) {
            $this->session->set_flashdata('error', 'Você não tem permissão para adicionar lançamentos.');
            redirect(base_url());
        }

        $this->load->library('form_validation');
        $this->data['custom_error'] = '';
        $urlAtual = $this->input->post('urlAtual');
        if ($this->form_validation->run('receita') == false) {
            $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
        } else {
            $vencimento = $this->input->post('vencimento');
            $recebimento = $this->input->post('recebimento');

            if ($recebimento != null) {
                $recebimento = explode('/', $recebimento);
                $recebimento = $recebimento[2] . '-' . $recebimento[1] . '-' . $recebimento[0];
            }

            if ($vencimento == null) {
                $vencimento = date('d/m/Y');
            }

            try {
                $vencimento = explode('/', $vencimento);
                $vencimento = $vencimento[2] . '-' . $vencimento[1] . '-' . $vencimento[0];
            } catch (Exception $e) {
                $vencimento = date('Y/m/d');
            }

            $valor = $this->input->post('valor');

            if (!validate_money($valor)) {
                $valor = str_replace([',', '.'], ['', ''], $valor);
            }

            $data = [
                'descricao' => set_value('descricao'),
                'valor' => $valor,
                'data_vencimento' => $vencimento,
                'data_pagamento' => $recebimento != null ? $recebimento : date('Y-m-d'),
                'baixado' => $this->input->post('recebido') ?: 0,
                'cliente_fornecedor' => set_value('cliente'),
                'cpf' => set_value('cpf'),
                'ruaLanc' => set_value('ruaLanc'),
                'bairroLanc' => set_value('bairroLanc'),
                'cidadeLanc' => set_value('cidadeLanc'),
                'forma_pgto' => $this->input->post('formaPgto'),
                'tipo' => set_value('tipo'),
            ];

            if ($this->financeiro_model->add('lancamentos', $data) == true) {
                $this->session->set_flashdata('success', 'Receita adicionada com sucesso!');
                log_info('Adicionou uma receita');
                redirect($urlAtual);
            } else {
                $this->data['custom_error'] = '<div class="form_error"><p>Ocorreu um erro.</p></div>';
            }
        }

        $this->session->set_flashdata('error', 'Ocorreu um erro ao tentar adicionar receita.');
        redirect($urlAtual);
    }

..................................................................................................................................................................................................

ainda em controllers/Financeiro.php "adicionar despesa" cole o código

public function adicionarDespesa()
    {
        if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'aLancamento')) {
            $this->session->set_flashdata('error', 'Você não tem permissão para adicionar lançamentos.');
            redirect(base_url());
        }

        $this->load->library('form_validation');
        $this->data['custom_error'] = '';
        $urlAtual = $this->input->post('urlAtual');
        if ($this->form_validation->run('despesa') == false) {
            $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
        } else {
            $vencimento = $this->input->post('vencimento');
            $pagamento = $this->input->post('pagamento');

            if ($pagamento != null) {
                $pagamento = explode('/', $pagamento);
                $pagamento = $pagamento[2] . '-' . $pagamento[1] . '-' . $pagamento[0];
            }

            if ($vencimento == null) {
                $vencimento = date('d/m/Y');
            }

            try {
                $vencimento = explode('/', $vencimento);
                $vencimento = $vencimento[2] . '-' . $vencimento[1] . '-' . $vencimento[0];
            } catch (Exception $e) {
                $vencimento = date('Y/m/d');
            }

            $valor = $this->input->post('valor');

            if (!validate_money($valor)) {
                $valor = str_replace([',', '.'], ['', ''], $valor);
            }

            $data = [
                'descricao' => set_value('descricao'),
                'valor' => $valor,
                'data_vencimento' => $vencimento,
                'data_pagamento' => $pagamento != null ? $pagamento : date('Y-m-d'),
                'baixado' => $this->input->post('pago') ?: 0,
                'cliente_fornecedor' => set_value('fornecedor'),
                'cpf' => set_value('cpf'),
                'ruaLanc' => set_value('ruaLanc'),
                'bairroLanc' => set_value('bairroLanc'),
                'cidadeLanc' => set_value('cidadeLanc'),
                'forma_pgto' => $this->input->post('formaPgto'),
                'tipo' => set_value('tipo'),
            ];

            if ($this->financeiro_model->add('lancamentos', $data) == true) {
                $this->session->set_flashdata('success', 'Despesa adicionada com sucesso!');
                log_info('Adicionou uma despesa');
                redirect($urlAtual);
            } else {
                $this->session->set_flashdata('error', 'Ocorreu um erro ao tentar adicionar despesa!');
                redirect($urlAtual);
            }
        }

        $this->session->set_flashdata('error', 'Ocorreu um erro ao tentar adicionar despesa.');
        redirect($urlAtual);
    }

...................................................................................................................................................................................... ainda em controllers/Financeiro.php "editar" cole o código

public function editar()
    {
        if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'eLancamento')) {
            $this->session->set_flashdata('error', 'Você não tem permissão para editar lançamentos.');
            redirect(base_url());
        }

        $this->load->library('form_validation');
        $this->data['custom_error'] = '';
        $urlAtual = $this->input->post('urlAtual');

        $this->form_validation->set_rules('descricao', '', 'trim|required');
        $this->form_validation->set_rules('fornecedor', '', 'trim|required');
        $this->form_validation->set_rules('valor', '', 'trim|required');
        $this->form_validation->set_rules('vencimento', '', 'trim|required');
        $this->form_validation->set_rules('pagamento', '', 'trim');
        $this->form_validation->set_rules('cpf', '', 'trim');
        $this->form_validation->set_rules('rua', '', 'trim');
        $this->form_validation->set_rules('bairro', '', 'trim');
        $this->form_validation->set_rules('cidade', '', 'trim');

        if ($this->form_validation->run() == false) {
            $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
        } else {
            $vencimento = $this->input->post('vencimento');
            $pagamento = $this->input->post('pagamento');

            try {
                $vencimento = explode('/', $vencimento);
                $vencimento = $vencimento[2] . '-' . $vencimento[1] . '-' . $vencimento[0];

                $pagamento = explode('/', $pagamento);
                $pagamento = $pagamento[2] . '-' . $pagamento[1] . '-' . $pagamento[0];
            } catch (Exception $e) {
                $vencimento = date('Y/m/d');
            }

            $data = [
                'descricao' => $this->input->post('descricao'),
                'valor' => $this->input->post('valor'),
                'data_vencimento' => $vencimento,
                'data_pagamento' => $pagamento,
                'baixado' => $this->input->post('pago') ?: 0,
                'cliente_fornecedor' => $this->input->post('fornecedor'),
                'cpf' => $this->input->post('cpf'),
                'ruaLanc' => $this->input->post('ruaLanc'),
                'bairroLanc' => $this->input->post('bairroLanc'),
                'cidadeLanc' => $this->input->post('cidadeLanc'),
                'forma_pgto' => $this->input->post('formaPgto'),
                'qtd_parcelas' => $this->input->post('qtdparcelas'),
                'tipo' => $this->input->post('tipo'),
            ];

            if ($this->financeiro_model->edit('lancamentos', $data, 'idLancamentos', $this->input->post('id')) == true) {
                $this->session->set_flashdata('success', 'lançamento editado com sucesso!');
                log_info('Alterou um lançamento no financeiro. ID' . $this->input->post('id'));
                redirect($urlAtual);
            } else {
                $this->session->set_flashdata('error', 'Ocorreu um erro ao tentar editar lançamento!');
                redirect($urlAtual);
            }
        }

        $this->session->set_flashdata('error', 'Ocorreu um erro ao tentar editar lançamento.');
        redirect($urlAtual);

        $data = [
            'descricao' => $this->input->post('descricao'),
            'valor' => $this->input->post('valor'),
            'data_vencimento' => $this->input->post('vencimento'),
            'data_pagamento' => $this->input->post('pagamento'),
            'baixado' => $this->input->post('pago'),
            'cliente_fornecedor' => set_value('fornecedor'),
            'cpf' => $this->input->post('cpf'),
            'ruaLanc' => $this->input->post('ruaLanc'),
            'bairroLanc' => $this->input->post('bairroLanc'),
            'cidadeLanc' => $this->input->post('cidadeLanc'),
            'forma_pgto' => $this->input->post('formaPgto'),
            'tipo' => $this->input->post('tipo'),
        ];
        print_r($data);
    }

.................................................................................................................................................................................... ainda em controllers/Financeiro.php cole o código imprimir

public function imprimir()
    {
        if (!$this->uri->segment(3) || !is_numeric($this->uri->segment(3))) {
            $this->session->set_flashdata('error', 'Item não pode ser encontrado, parâmetro não foi passado corretamente.');
            redirect('mapos');
        }

        if (!$this->permission->checkPermission($this->session->userdata('permissao'), 'vLancamento')) {
            $this->session->set_flashdata('error', 'Você não tem permissão para imprimir recibo.');
            redirect(base_url());
        }

        $this->data['custom_error'] = '';
        $this->load->model('mapos_model');
        $this->data['result'] = $this->financeiro_model->getById($this->uri->segment(3));
        $this->data['emitente'] = $this->mapos_model->getEmitente();

        $this->load->view('financeiro/imprimirRecibo', $this->data);
    }

............................................................................................................................................................................. Agora vamos pro arquivo models/Financeiro_model Substitui o que tiver com esse título " public function getById($id)"e cola esse abaixo

public function getById($id)
    {
        $this->db->select('lancamentos.*, clientes.*');
        $this->db->from('lancamentos');
        $this->db->where('idLancamentos', $id);
        $this->db->join('clientes', 'clientes.idClientes = lancamentos.clientes_id', 'left');
        $this->db->limit(1);
        return $this->db->get()->row();
    }

............................................................................................................................................................................................................... em breve a continuação do código

Quem quiser Testar o sistema segue o link e usuário e senha abaixo https://nacionalsistemas.000webhostapp.com/index.php/login usuário: convidado@gmail.com Senha: 123456 abraços

melezinf commented 4 years ago

Boa tarde, olhando seu sistema achei interessante a opção de alterar status da OS sem precisar clicar em editar, poderia compartilhar esta mudança?

JulianoSavino commented 4 years ago

Nossa, muito bom! essas alterações com certeza podem ser incorporadas ao projeto oficial, tanto a do recibo como a de alterar o status da OS sem precisar abri-la. O que acha @Pr3d4dor ?

Pr3d4dor commented 4 years ago

@JulianoSavino Se o @visaotec fizer a PR com as alterações elas serão aceitas.

JulianoSavino commented 4 years ago

Meu amigo @visaotec, se conseguir fazer a Pull das alterações, será incorporada na versão oficial do sistema... Muito top isso!! Se for possível, será muito útil e bem vindo as alterações que vc fez como: Recibo mencionado nesse tópico Alteração de status sem abrir as os. Nosso ilustríssimo @Pr3d4dor já avalizou as alterações \o/.

acinformatica2004 commented 4 years ago

Boa noite, tem mais algum código, ou somente esse para o recibo? Obrigado

Pr3d4dor commented 4 years ago

@visaotec Se você postar o código que falta (view imprimirRecibo) eu consigo fazer a PR e colocar os créditos para você. Ou se quiser também pode abrir uma PR com a funcionalidade.

visaotec commented 4 years ago

@visaotec Se você postar o código que falta (view imprimirRecibo) eu consigo fazer a PR e colocar os créditos para você. Ou se quiser também pode abrir uma PR com a funcionalidade.

E aí tudo blz, eu vou terminar de postar os códigos.. só questão de tempo mesmo!

github-actions[bot] commented 3 years ago

Esta issue está obsoleta porque está aberta há 30 dias sem atividade. Remova o rótulo ou esse comentário ou essa issue será fechada em 5 dias

MarceloGrass commented 3 years ago

Boa tarde, ótima melhora no sistema parabéns!!! foi abandonada a implementação?

@visaotec Se você postar o código que falta (view imprimirRecibo) eu consigo fazer a PR e colocar os créditos para você. Ou se quiser também pode abrir uma PR com a funcionalidade.

E aí tudo blz, eu vou terminar de postar os códigos.. só questão de tempo mesmo!