Closed josircg closed 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()
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.
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.
Resolvido.
1) Pode colocar em produção! 2) Roda o script para os 20 primeiros;
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.
Coloquei em produção, fiz os ajustes do Log, e já rodei o script para os 20 primeiros.
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.
1) Já existia, ele chamava "Incluir Membros Automaticamente", renomeei ele para "Adicionar Membros"; 2) Isso está sendo feito na rotina criada anteriormente.
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.
Peguei um erro. O tipo Estadual é "S" eu estava fazendo as condições com "E". Agora está funcionando.
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.