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
-
-
-
- | ID |
- Militante ID |
- Tipo de Pagamento |
- Valor |
- Data do Pagamento |
-
-
-
- {% for pagamento in pagamentos %}
-
- | {{ pagamento.id }} |
- {{ pagamento.militante_id }} |
- {{ pagamento.tipo_pagamento_id }} |
- R$ {{ pagamento.valor }} |
- {{ pagamento.data_pagamento }} |
-
- {% endfor %}
-
-
- Home
+
+
+
Pagamentos
+
+
+
+
+
+
+
+
+
+
+
+
+ | Militante |
+ Tipo de Pagamento |
+ Valor |
+ Data do Pagamento |
+ Ações |
+
+
+
+ {% for pagamento in pagamentos %}
+
+ | {{ 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') }} |
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tem certeza que deseja excluir este pagamento?
+
+
+
+
+
+
+{% endblock %}
+
+{% block scripts %}
+
{% endblock %}