fix: Atualiza valores dos checkboxes de responsabilidades no template do modal
This commit is contained in:
87
app.py
87
app.py
@@ -50,6 +50,7 @@ import random
|
||||
import string
|
||||
from sqlalchemy.sql import func
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
import json
|
||||
|
||||
load_dotenv()
|
||||
|
||||
@@ -425,7 +426,7 @@ def criar_militante():
|
||||
def listar_militantes():
|
||||
db = get_db_connection()
|
||||
try:
|
||||
militantes = db.query(Militante).all()
|
||||
militantes = db.query(Militante).order_by(Militante.nome).all()
|
||||
celulas = db.query(Celula).order_by(Celula.nome).all()
|
||||
return render_template('listar_militantes.html', militantes=militantes, Militante=Militante, celulas=celulas)
|
||||
finally:
|
||||
@@ -1051,14 +1052,23 @@ def editar_militante(militante_id):
|
||||
militante.celula_id = None
|
||||
|
||||
# Tratar responsabilidades corretamente
|
||||
responsabilidades = request.form.getlist('responsabilidades')
|
||||
if responsabilidades:
|
||||
try:
|
||||
militante.responsabilidades = sum(int(r) for r in responsabilidades)
|
||||
except (ValueError, TypeError):
|
||||
militante.responsabilidades = 0
|
||||
responsabilidades_json = request.form.get('responsabilidades')
|
||||
if responsabilidades_json:
|
||||
responsabilidades_lista = json.loads(responsabilidades_json)
|
||||
valor_responsabilidades = 0
|
||||
if 'Finanças' in responsabilidades_lista:
|
||||
valor_responsabilidades |= Militante.RESPONSAVEL_FINANCAS
|
||||
if 'Imprensa' in responsabilidades_lista:
|
||||
valor_responsabilidades |= Militante.RESPONSAVEL_IMPRENSA
|
||||
if 'Quadro-Orientador' in responsabilidades_lista:
|
||||
valor_responsabilidades |= Militante.QUADRO_ORIENTADOR
|
||||
militante.responsabilidades = valor_responsabilidades
|
||||
else:
|
||||
militante.responsabilidades = 0
|
||||
except (ValueError, TypeError, json.JSONDecodeError) as e:
|
||||
print(f"Erro ao processar responsabilidades: {str(e)}")
|
||||
militante.responsabilidades = 0
|
||||
|
||||
print("Dados organizacionais atualizados")
|
||||
|
||||
@@ -1555,54 +1565,43 @@ def excluir_assinatura(id):
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@app.route("/militantes/<int:militante_id>/dados")
|
||||
@app.route("/militantes/dados/<int:militante_id>")
|
||||
@require_login
|
||||
@require_permission('gerenciar_militantes')
|
||||
def get_militante_dados(militante_id):
|
||||
"""Retorna os dados completos de um militante"""
|
||||
print(f"Buscando dados do militante {militante_id}")
|
||||
def buscar_dados_militante(militante_id):
|
||||
"""Retorna os dados de um militante"""
|
||||
db = get_db_connection()
|
||||
try:
|
||||
militante = db.query(Militante).options(
|
||||
joinedload(Militante.endereco),
|
||||
joinedload(Militante.emails),
|
||||
joinedload(Militante.celula)
|
||||
joinedload(Militante.emails)
|
||||
).get(militante_id)
|
||||
|
||||
if not militante:
|
||||
print(f"Militante {militante_id} não encontrado")
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': 'Militante não encontrado'
|
||||
}), 404
|
||||
|
||||
print(f"Militante {militante_id} encontrado: {militante.nome}")
|
||||
# Converter responsabilidades para lista de strings
|
||||
responsabilidades = []
|
||||
if militante.responsabilidades & Militante.RESPONSAVEL_FINANCAS:
|
||||
responsabilidades.append('Finanças')
|
||||
if militante.responsabilidades & Militante.RESPONSAVEL_IMPRENSA:
|
||||
responsabilidades.append('Imprensa')
|
||||
if militante.responsabilidades & Militante.QUADRO_ORIENTADOR:
|
||||
responsabilidades.append('Quadro-Orientador')
|
||||
|
||||
# Formatar datas para o formato YYYY-MM-DD
|
||||
data_nascimento = militante.data_nascimento.strftime('%Y-%m-%d') if militante.data_nascimento else None
|
||||
data_entrada = militante.data_entrada_oci.strftime('%Y-%m-%d') if militante.data_entrada_oci else None
|
||||
data_efetivacao = militante.data_efetivacao_oci.strftime('%Y-%m-%d') if militante.data_efetivacao_oci else None
|
||||
|
||||
# Buscar o primeiro email do militante
|
||||
email_principal = None
|
||||
if militante.emails and len(militante.emails) > 0:
|
||||
email_principal = militante.emails[0].endereco_email
|
||||
|
||||
dados = {
|
||||
'id': militante.id,
|
||||
return jsonify({
|
||||
'nome': militante.nome,
|
||||
'cpf': militante.cpf,
|
||||
'titulo_eleitoral': militante.titulo_eleitoral,
|
||||
'data_nascimento': data_nascimento,
|
||||
'data_entrada_oci': data_entrada,
|
||||
'data_efetivacao_oci': data_efetivacao,
|
||||
|
||||
# Contato
|
||||
'data_nascimento': militante.data_nascimento.strftime('%Y-%m-%d') if militante.data_nascimento else None,
|
||||
'data_entrada_oci': militante.data_entrada_oci.strftime('%Y-%m-%d') if militante.data_entrada_oci else None,
|
||||
'data_efetivacao_oci': militante.data_efetivacao_oci.strftime('%Y-%m-%d') if militante.data_efetivacao_oci else None,
|
||||
'telefone1': militante.telefone1,
|
||||
'telefone2': militante.telefone2,
|
||||
'email': email_principal,
|
||||
|
||||
# Endereço
|
||||
'email': militante.emails[0].endereco_email if militante.emails else None,
|
||||
'endereco': {
|
||||
'cep': militante.endereco.cep if militante.endereco else None,
|
||||
'estado': militante.endereco.estado if militante.endereco else None,
|
||||
@@ -1612,34 +1611,22 @@ def get_militante_dados(militante_id):
|
||||
'numero': militante.endereco.numero if militante.endereco else None,
|
||||
'complemento': militante.endereco.complemento if militante.endereco else None
|
||||
} if militante.endereco else None,
|
||||
|
||||
# Profissional
|
||||
'profissao': militante.profissao,
|
||||
'regime_trabalho': militante.regime_trabalho,
|
||||
'empresa': militante.empresa,
|
||||
'contratante': militante.contratante,
|
||||
|
||||
# Acadêmico
|
||||
'instituicao_ensino': militante.instituicao_ensino,
|
||||
'tipo_instituicao': militante.tipo_instituicao,
|
||||
|
||||
# Sindical
|
||||
'sindicato': militante.sindicato,
|
||||
'cargo_sindical': militante.cargo_sindical,
|
||||
'central_sindical': militante.central_sindical,
|
||||
'dirigente_sindical': militante.dirigente_sindical,
|
||||
|
||||
# Organização
|
||||
'estado': militante.estado.value if militante.estado else 'ATIVO',
|
||||
'estado': militante.estado.name if militante.estado else None,
|
||||
'celula_id': militante.celula_id,
|
||||
'responsabilidades': militante.responsabilidades
|
||||
}
|
||||
|
||||
print(f"Dados formatados: {dados}")
|
||||
return jsonify(dados)
|
||||
|
||||
'responsabilidades': responsabilidades
|
||||
})
|
||||
except Exception as e:
|
||||
print(f"Erro ao buscar dados do militante {militante_id}: {str(e)}")
|
||||
print(f"Erro ao buscar dados do militante: {str(e)}")
|
||||
return jsonify({
|
||||
'status': 'error',
|
||||
'message': f'Erro ao buscar dados do militante: {str(e)}'
|
||||
|
||||
@@ -45,7 +45,12 @@
|
||||
}
|
||||
|
||||
.table-hover tbody tr:hover {
|
||||
background-color: var(--table-hover-bg);
|
||||
background-color: var(--table-hover-bg) !important;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.table-hover tbody tr {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* Botões de ação */
|
||||
@@ -125,8 +130,8 @@
|
||||
|
||||
/* Badges */
|
||||
.badge {
|
||||
padding: 0.5em 0.75em;
|
||||
font-weight: 500;
|
||||
padding: 0.5em 0.8em;
|
||||
}
|
||||
|
||||
.badge.bg-success {
|
||||
@@ -416,3 +421,24 @@ input[type="date"]:focus {
|
||||
border-color: var(--primary-color);
|
||||
box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
|
||||
}
|
||||
|
||||
/* Estilo para colunas ordenáveis */
|
||||
th[data-sort] {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
th[data-sort] i {
|
||||
margin-left: 5px;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
th[data-sort].sort-asc i,
|
||||
th[data-sort].sort-desc i {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
/* Animação para linhas da tabela */
|
||||
#militantesTable tbody tr {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
@@ -117,8 +117,8 @@
|
||||
<input type="text" class="form-control" id="edit_bairro" name="bairro">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="edit_logradouro" class="form-label">Logradouro</label>
|
||||
<input type="text" class="form-control" id="edit_logradouro" name="rua">
|
||||
<label for="edit_rua" class="form-label">Rua</label>
|
||||
<input type="text" class="form-control" id="edit_rua" name="rua">
|
||||
</div>
|
||||
<div class="col-md-2 mb-3">
|
||||
<label for="edit_numero" class="form-label">Número</label>
|
||||
@@ -212,10 +212,10 @@
|
||||
<div class="col-md-6 mb-3">
|
||||
<label for="edit_estado_militante" class="form-label">Estado</label>
|
||||
<select class="form-select" id="edit_estado_militante" name="estado">
|
||||
<option value="ativo">Ativo</option>
|
||||
<option value="licenciado">Licenciado</option>
|
||||
<option value="suspenso">Suspenso</option>
|
||||
<option value="desligado">Desligado</option>
|
||||
<option value="ATIVO">Ativo</option>
|
||||
<option value="LICENCIADO">Licenciado</option>
|
||||
<option value="SUSPENSO">Suspenso</option>
|
||||
<option value="DESLIGADO">Desligado</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
@@ -228,24 +228,25 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Responsabilidades -->
|
||||
<div class="mb-3">
|
||||
<label class="form-label d-block">Responsabilidades</label>
|
||||
<div class="row g-3">
|
||||
<div class="col-md-4">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_1" name="responsabilidades" value="1">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_1" name="responsabilidades" value="256">
|
||||
<label class="form-check-label" for="edit_resp_1">Finanças</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_2" name="responsabilidades" value="2">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_2" name="responsabilidades" value="512">
|
||||
<label class="form-check-label" for="edit_resp_2">Imprensa</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_4" name="responsabilidades" value="4">
|
||||
<input type="checkbox" class="form-check-input" id="edit_resp_4" name="responsabilidades" value="64">
|
||||
<label class="form-check-label" for="edit_resp_4">Quadro-Orientador</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user