josircg / raizcidadanista

Sistema de Gerenciamento da Raiz Cidadanista
http://www.raiz.org.br
GNU General Public License v3.0
1 stars 2 forks source link

Inclusão automática do Membro no círculo municipal e estadual caso existam #63

Closed josircg closed 8 years ago

josircg commented 8 years ago

Hoje quando o membro é cadastrado, ele é adicionado automaticamente na lista Colaboradores ou Filiado.

Temos agora que adicionar também o membro na círculo estadual correspondente ao estado em que reside e também no círculo municipal da cidade em que reside.

Temos que fazer um script para adicionar os já existentes.

leonardocsantoss commented 8 years ago

Coloquei apenas no ambiente de testes.

A ideia do script foi assim:

from cadastro.models import Membro, Circulo, CirculoMembro

for instance in Membro.objects.all():
    circulos_ja_cadastrados_pks = CirculoMembro.objects.filter(membro=instance).values_list('circulo', flat=True)
    circulos_estaduais_municipais = Circulo.objects.filter(uf=instance.uf, municipio__in=(None, '', instance.municipio)).exclude(pk__in=circulos_ja_cadastrados_pks)
    for circulo in circulos_estaduais_municipais:
        CirculoMembro(circulo=circulo, membro=instance).save()
leonardocsantoss commented 8 years ago

Script ajustado para criar um log:


from cadastro.models import Membro, Circulo, CirculoMembro
from django.contrib.auth.models import User
from django.contrib.admin.models import LogEntry, CHANGE
from django.contrib.contenttypes.models import ContentType

for instance in Membro.objects.all():
    circulos_ja_cadastrados_pks = CirculoMembro.objects.filter(membro=instance).values_list('circulo', flat=True)
    circulos_estaduais_municipais = Circulo.objects.filter(uf=instance.uf, tipo='R', municipio__in=(None, '', instance.municipio)).exclude(pk__in=circulos_ja_cadastrados_pks)
    for circulo in circulos_estaduais_municipais:
        CirculoMembro(circulo=circulo, membro=instance).save()

        # Log
        user = User.objects.get_or_create(username="sys")[0]
        LogEntry.objects.log_action(
            user_id = user.pk,
            content_type_id = ContentType.objects.get_for_model(instance).pk,
            object_id = instance.pk,
            object_repr = u"%s" % instance,
            action_flag = CHANGE,
            change_message = u'Membro adicionado automaticamente no Círculo %s.' % circulo
        )

Rodei apenas para os primeiros 20 membros do ambiente de testes.

josircg commented 8 years ago

Além de criar esse batch geral, vamos criar um PowerButton para incluir esses membros para um círculo específico. O PowerButton vai servir para incluir os membros para os novos círculos que forem criados no futuro.

Só habilitar o PowerButton se o círculo for Regional ou Esfera e se houver Estado.

leonardocsantoss commented 8 years ago

Resolvido.

josircg commented 8 years ago

1) Pode colocar em produção! 2) Roda o script para os 20 primeiros;

josircg commented 8 years ago

Quando o próprio membro se inclui em algum círculo, o sistema tem que incluir um log no círculo e também um log para o membro.

leonardocsantoss commented 8 years ago

Coloquei em produção, fiz os ajustes do Log, e já rodei o script para os 20 primeiros.

josircg commented 8 years ago

1) Habilitar o PowerButton "Adicionar Membros" se o círculo for Regional ou Estadual.

2) Na rotina que já adiciona os membros nas listas Colaboradores e Visitantes, incluir também o membro no círculo Estadual referente ao Estado em que ele reside.

leonardocsantoss commented 8 years ago

1) Já existia, ele chamava "Incluir Membros Automaticamente", renomeei ele para "Adicionar Membros"; 2) Isso está sendo feito na rotina criada anteriormente.

josircg commented 8 years ago

1) Confere por favor pois a rotina só está funcionando para Regional e não funciona se o círculo está marcado como Estadual.

2) Confere também pois ele só está fazendo se o círculo for Regional. Depois que criamos o círculo Estadual, a rotina parou de funcionar.

leonardocsantoss commented 8 years ago

Peguei um erro. O tipo Estadual é "S" eu estava fazendo as condições com "E". Agora está funcionando.