diff --git a/static/js/pagamentos.js b/static/js/pagamentos.js new file mode 100644 index 0000000..40a876c --- /dev/null +++ b/static/js/pagamentos.js @@ -0,0 +1,256 @@ +document.addEventListener('DOMContentLoaded', function() { + console.log('Carregando script pagamentos.js...'); + + // Inicializar DataTable + const table = $('#tabelaPagamentos').DataTable({ + language: { + url: '//cdn.datatables.net/plug-ins/1.13.7/i18n/pt-BR.json' + }, + order: [[3, 'desc']], // Ordenar por data de pagamento (decrescente) + columnDefs: [ + { targets: -1, orderable: false } // Desabilitar ordenação na coluna de ações + ] + }); + + // Configuração do modal de edição + const modalEditarPagamento = document.getElementById('modalEditarPagamento'); + if (modalEditarPagamento) { + modalEditarPagamento.addEventListener('show.bs.modal', function(event) { + console.log('Modal de edição sendo exibido'); + const button = event.relatedTarget; + + if (!button) { + console.error('Botão não encontrado!'); + return; + } + + const pagamentoId = button.getAttribute('data-pagamento-id'); + console.log('ID do pagamento:', pagamentoId); + + // Dados do pagamento + const dados = { + militanteId: button.getAttribute('data-militante-id'), + militanteNome: button.closest('tr').querySelector('td').textContent.trim(), + tipoPagamento: button.getAttribute('data-tipo-pagamento'), + valor: button.getAttribute('data-valor'), + dataPagamento: button.getAttribute('data-data-pagamento') + }; + console.log('Dados do pagamento:', dados); + + // Preencher campos + document.getElementById('editMilitante').value = dados.militanteId; + document.getElementById('editMilitanteNome').value = dados.militanteNome; + document.getElementById('editTipoPagamento').value = dados.tipoPagamento; + document.getElementById('editValor').value = dados.valor; + document.getElementById('editDataPagamento').value = dados.dataPagamento; + + // Configurar formulário + const form = document.getElementById('formEditarPagamento'); + if (form) { + form.action = `/pagamentos/editar/${pagamentoId}`; + console.log('Action do formulário:', form.action); + + // Remover listeners antigos para evitar duplicação + const newForm = form.cloneNode(true); + form.parentNode.replaceChild(newForm, form); + + // Adicionar listener para o submit do formulário + newForm.addEventListener('submit', function(e) { + e.preventDefault(); + console.log('Formulário submetido'); + + // Criar FormData com os dados do formulário + const formData = new FormData(this); + + // Log dos dados sendo enviados + console.log('Dados do formulário:'); + for (let [key, value] of formData.entries()) { + console.log(key + ': ' + value); + } + + // Enviar requisição + fetch(this.action, { + method: 'POST', + body: formData + }) + .then(response => { + console.log('Status da resposta:', response.status); + return response.json(); + }) + .then(data => { + console.log('Resposta:', data); + if (data.status === 'success') { + // Fechar modal + const modal = bootstrap.Modal.getInstance(modalEditarPagamento); + modal.hide(); + + // Recarregar página + window.location.reload(); + } else { + alert('Erro ao atualizar pagamento: ' + data.message); + } + }) + .catch(error => { + console.error('Erro:', error); + alert('Erro ao atualizar pagamento. Por favor, tente novamente.'); + }); + }); + } + }); + } + + // Configuração do modal de exclusão + const modalExcluirPagamento = document.getElementById('modalExcluirPagamento'); + if (modalExcluirPagamento) { + modalExcluirPagamento.addEventListener('show.bs.modal', function(event) { + console.log('Modal de exclusão sendo exibido'); + const button = event.relatedTarget; + + if (!button) { + console.error('Botão não encontrado!'); + return; + } + + const pagamentoId = button.getAttribute('data-pagamento-id'); + const pagamentoInfo = button.getAttribute('data-pagamento-info'); + console.log('ID do pagamento:', pagamentoId); + + // Atualizar informações no modal + document.getElementById('pagamentoInfo').textContent = pagamentoInfo; + + // Configurar formulário + const form = document.getElementById('formExcluirPagamento'); + if (form) { + form.action = `/pagamentos/excluir/${pagamentoId}`; + console.log('Action do formulário:', form.action); + + // Remover listeners antigos para evitar duplicação + const newForm = form.cloneNode(true); + form.parentNode.replaceChild(newForm, form); + + // Adicionar listener para o submit do formulário + newForm.addEventListener('submit', function(e) { + e.preventDefault(); + console.log('Formulário submetido'); + + // Enviar requisição + fetch(this.action, { + method: 'POST' + }) + .then(response => { + console.log('Status da resposta:', response.status); + return response.json(); + }) + .then(data => { + console.log('Resposta:', data); + if (data.status === 'success') { + // Fechar modal + const modal = bootstrap.Modal.getInstance(modalExcluirPagamento); + modal.hide(); + + // Recarregar página + window.location.reload(); + } else { + alert('Erro ao excluir pagamento: ' + data.message); + } + }) + .catch(error => { + console.error('Erro:', error); + alert('Erro ao excluir pagamento. Por favor, tente novamente.'); + }); + }); + } + }); + } + + // Configuração do formulário de novo pagamento + const formNovoPagamento = document.getElementById('formNovoPagamento'); + if (formNovoPagamento) { + formNovoPagamento.addEventListener('submit', function(e) { + e.preventDefault(); + console.log('Formulário de novo pagamento submetido'); + + // Criar FormData com os dados do formulário + const formData = new FormData(this); + + // Log dos dados sendo enviados + console.log('Dados do formulário:'); + for (let [key, value] of formData.entries()) { + console.log(key + ': ' + value); + } + + // Enviar requisição + fetch(this.action, { + method: 'POST', + body: formData + }) + .then(response => { + console.log('Status da resposta:', response.status); + return response.json(); + }) + .then(data => { + console.log('Resposta:', data); + if (data.status === 'success') { + // Fechar modal + const modal = bootstrap.Modal.getInstance(document.getElementById('modalNovoPagamento')); + modal.hide(); + + // Recarregar página + window.location.reload(); + } else { + alert('Erro ao adicionar pagamento: ' + data.message); + } + }) + .catch(error => { + console.error('Erro:', error); + alert('Erro ao adicionar pagamento. Por favor, tente novamente.'); + }); + }); + } + + // Configuração do botão de exportar + const btnExportar = document.getElementById('btnExportar'); + if (btnExportar) { + btnExportar.addEventListener('click', function() { + console.log('Exportando dados...'); + + // Coletar dados da tabela + const dados = []; + table.rows().every(function() { + const row = this.data(); + dados.push({ + militante: row[0], + tipo_pagamento: row[1], + valor: row[2].replace('R$ ', ''), + data_pagamento: row[3] + }); + }); + + // Converter para CSV + const csv = [ + ['Militante', 'Tipo de Pagamento', 'Valor', 'Data do Pagamento'], + ...dados.map(row => [ + row.militante, + row.tipo_pagamento, + row.valor, + row.data_pagamento + ]) + ] + .map(row => row.join(',')) + .join('\n'); + + // Criar blob e fazer download + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + const link = document.createElement('a'); + if (link.download !== undefined) { + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', 'pagamentos.csv'); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + }); + } +}); \ No newline at end of file diff --git a/templates/listar_pagamentos.html b/templates/listar_pagamentos.html index 30dfe5a..8ffe951 100644 --- a/templates/listar_pagamentos.html +++ b/templates/listar_pagamentos.html @@ -1,32 +1,203 @@ -{% extends 'base.html' %} +{% extends "base.html" %} -{% block title %}Listar Militantes{% endblock %} +{% block title %}Pagamentos{% endblock %} {% block content %} -

Pagamentos

- Adicionar Novo Pagamento - - - - - - - - - - - - {% for pagamento in pagamentos %} - - - - - - - - {% endfor %} - -
IDMilitante IDTipo de PagamentoValorData do Pagamento
{{ pagamento.id }}{{ pagamento.militante_id }}{{ pagamento.tipo_pagamento_id }}R$ {{ pagamento.valor }}{{ pagamento.data_pagamento }}
- Home +
+
+

Pagamentos

+
+ + +
+
+ +
+
+
+ + + + + + + + + + + + {% for pagamento in pagamentos %} + + + + + + + + {% endfor %} + +
MilitanteTipo de PagamentoValorData do PagamentoAções
{{ pagamento.militante.nome if pagamento.militante else 'N/A' }} + {% if pagamento.tipo_pagamento == 1 %} + Mensalidade + {% elif pagamento.tipo_pagamento == 2 %} + Contribuição Extra + {% elif pagamento.tipo_pagamento == 3 %} + Doação + {% elif pagamento.tipo_pagamento == 4 %} + Taxa de Evento + {% elif pagamento.tipo_pagamento == 5 %} + Outros + {% else %} + Não Definido + {% endif %} + R$ {{ "%.2f"|format(pagamento.valor) }}{{ pagamento.data_pagamento.strftime('%d/%m/%Y') }} + + +
+
+
+
+
+ + + + + + + + + +{% endblock %} + +{% block scripts %} + {% endblock %}