From 77cf5ad99c7ea4ff50b624f121325266371989df Mon Sep 17 00:00:00 2001 From: andersonid Date: Thu, 3 Apr 2025 17:08:53 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrige=20edi=C3=A7=C3=A3o=20de=20cotas?= =?UTF-8?q?=20-=20Ajusta=20exibi=C3=A7=C3=A3o=20do=20militante=20e=20valor?= =?UTF-8?q?es=20no=20modal=20de=20edi=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 43 ++++++- static/js/cotas.js | 127 ++++++++++++++++++++ templates/listar_cotas.html | 227 ++++-------------------------------- 3 files changed, 186 insertions(+), 211 deletions(-) create mode 100644 static/js/cotas.js diff --git a/app.py b/app.py index 0060580..5161599 100644 --- a/app.py +++ b/app.py @@ -519,13 +519,21 @@ def editar_cota(id): if request.method == 'POST': try: + print("Dados recebidos:", request.form) cota.militante_id = int(request.form['militante_id']) cota.valor_antigo = float(request.form['valor_antigo']) cota.valor_novo = float(request.form['valor_novo']) cota.data_alteracao = datetime.strptime(request.form['data_alteracao'], '%Y-%m-%d').date() cota.data_vencimento = datetime.strptime(request.form['data_vencimento'], '%Y-%m-%d').date() + # Processar o campo pago + pago = request.form.get('pago', '').lower() + print("Valor do campo pago recebido:", pago) + cota.pago = pago == 'true' + print("Status final do pago:", cota.pago) + db.commit() + print("Commit realizado com sucesso") if request.headers.get('X-Requested-With') == 'XMLHttpRequest': return jsonify({ @@ -538,12 +546,15 @@ def editar_cota(id): except Exception as e: db.rollback() - print(f"Erro ao atualizar cota: {e}") + print(f"Erro ao atualizar cota: {str(e)}") + print(f"Tipo do erro: {type(e)}") + import traceback + traceback.print_exc() if request.headers.get('X-Requested-With') == 'XMLHttpRequest': return jsonify({ 'status': 'error', - 'message': 'Erro ao atualizar cota. Verifique os dados e tente novamente.' + 'message': f'Erro ao atualizar cota: {str(e)}' }), 400 flash('Erro ao atualizar cota. Verifique os dados e tente novamente.', 'danger') @@ -552,11 +563,11 @@ def editar_cota(id): return render_template('editar_cota.html', cota=cota) except Exception as e: - print(f"Erro ao carregar cota: {e}") + print(f"Erro ao carregar cota: {str(e)}") if request.headers.get('X-Requested-With') == 'XMLHttpRequest': return jsonify({ 'status': 'error', - 'message': 'Erro ao carregar cota.' + 'message': f'Erro ao carregar cota: {str(e)}' }), 404 flash('Erro ao carregar cota', 'danger') return redirect(url_for('listar_cotas')) @@ -1585,6 +1596,30 @@ def delete_pagamento(id): db.close() >>>>>>> 324660d (refactor: melhorias na interface e funcionalidades - Atualização do layout do dashboard com Bootstrap 5 - Remoção do template editar_pagamento.html (integrado ao modal) - Melhorias no template home.html com cards estatísticos - Ajustes nos estilos e responsividade - Correções nas rotas e conexões do banco de dados - Implementação do modal de edição de pagamentos - Adição de efeitos hover e melhorias visuais) +@app.route("/cotas/excluir/", methods=["POST"]) +@login_required +@session_timeout +def excluir_cota(id): + """Exclui uma cota mensal""" + db = get_db_connection() + try: + cota = db.query(CotaMensal).get(id) + if not cota: + flash('Cota não encontrada.', 'danger') + return redirect(url_for('listar_cotas')) + + # Excluir a cota + db.delete(cota) + db.commit() + flash('Cota excluída com sucesso!', 'success') + except Exception as e: + db.rollback() + flash('Erro ao excluir cota. Por favor, tente novamente.', 'danger') + print(f"Erro ao excluir cota: {e}") + finally: + db.close() + return redirect(url_for('listar_cotas')) + def create_app(): app = Flask(__name__) # ... existing code ... diff --git a/static/js/cotas.js b/static/js/cotas.js new file mode 100644 index 0000000..b8aa58b --- /dev/null +++ b/static/js/cotas.js @@ -0,0 +1,127 @@ +document.addEventListener('DOMContentLoaded', function() { + console.log('Carregando script cotas.js...'); + + // Configuração do modal de edição + const modalEditarCota = document.getElementById('modalEditarCota'); + if (modalEditarCota) { + modalEditarCota.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 cotaId = button.getAttribute('data-cota-id'); + console.log('ID da cota:', cotaId); + + // Dados da cota + const dados = { + militanteId: button.getAttribute('data-cota-militante'), + militanteNome: button.closest('tr').querySelector('td').textContent.trim(), + valorAntigo: button.closest('tr').querySelector('td[data-valor_antigo]').getAttribute('data-valor_antigo'), + valorNovo: button.closest('tr').querySelector('td[data-valor_novo]').getAttribute('data-valor_novo'), + dataAlteracao: button.getAttribute('data-cota-data-alteracao'), + dataVencimento: button.getAttribute('data-cota-data-vencimento'), + pago: button.getAttribute('data-cota-pago') === 'true' + }; + console.log('Dados da cota:', dados); + + // Preencher campos + document.getElementById('editMilitante').value = dados.militanteId; + document.getElementById('editMilitanteNome').value = dados.militanteNome; + document.getElementById('editValorAntigo').value = dados.valorAntigo; + document.getElementById('editValorNovo').value = dados.valorNovo; + document.getElementById('editDataAlteracao').value = dados.dataAlteracao; + document.getElementById('editDataVencimento').value = dados.dataVencimento; + document.getElementById('editPago').checked = dados.pago; + + // Configurar formulário + const form = document.getElementById('formEditarCota'); + if (form) { + form.action = `/cotas/editar/${cotaId}`; + 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); + + // Adicionar campo pago com o valor correto + const isPago = document.getElementById('editPago').checked; + formData.set('pago', isPago ? 'true' : 'false'); + + // 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(modalEditarCota); + modal.hide(); + + // Recarregar página + window.location.reload(); + } else { + alert('Erro ao atualizar cota: ' + data.message); + } + }) + .catch(error => { + console.error('Erro:', error); + alert('Erro ao atualizar cota. Por favor, tente novamente.'); + }); + }); + } + }); + } + + // Configuração do modal de exclusão + const deleteModal = document.getElementById('deleteModal'); + if (deleteModal) { + deleteModal.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 cotaId = button.getAttribute('data-cota-id'); + const cotaInfo = button.getAttribute('data-cota-info'); + console.log('ID da cota:', cotaId); + console.log('Info da cota:', cotaInfo); + + // Atualizar texto do modal + document.getElementById('cotaInfo').textContent = cotaInfo; + + // Configurar formulário de exclusão + const form = document.getElementById('deleteForm'); + if (form) { + form.action = `/cotas/excluir/${cotaId}`; + console.log('Action do formulário:', form.action); + } + }); + } +}); \ No newline at end of file diff --git a/templates/listar_cotas.html b/templates/listar_cotas.html index b34e1d6..54ff147 100644 --- a/templates/listar_cotas.html +++ b/templates/listar_cotas.html @@ -43,6 +43,7 @@ Valor Novo Data de Alteração Data de Vencimento + Status Ações @@ -54,6 +55,15 @@ R$ {{ "%.2f"|format(cota.valor_novo) }} {{ cota.data_alteracao.strftime('%d/%m/%Y') }} {{ cota.data_vencimento.strftime('%d/%m/%Y') }} + + {% if cota.status == 'paga' %} + Paga + {% elif cota.status == 'atrasada' %} + Atrasada + {% else %} + Pendente + {% endif %} +
@@ -150,13 +161,9 @@ {% endblock %} -{% block extra_js %} - +{% block scripts %} + {% endblock %} {% block extra_css %}