mirror of https://github.com/interlegis/sigi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
6.2 KiB
146 lines
6.2 KiB
# -*- coding: utf-8 -*-
|
|
import json as simplejson # XXX trocar isso por simplesmente import json e refatorar o codigo
|
|
|
|
from django import forms
|
|
from django.db.models import Q
|
|
from django.forms.forms import BoundField
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.template.context import RequestContext
|
|
from django.utils.translation import ugettext as _
|
|
from django.views.generic.base import TemplateView
|
|
|
|
from sigi.apps.casas.models import Orgao
|
|
from sigi.apps.contatos.models import UnidadeFederativa
|
|
from sigi.apps.servicos.models import (TipoServico, CasaManifesta, CasaAtendida,
|
|
ServicoManifesto)
|
|
|
|
|
|
class MapaView(TemplateView):
|
|
|
|
template_name = "servicos/mapa.html"
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(MapaView, self).get_context_data(**kwargs)
|
|
context['servicos'] = TipoServico.objects.all()
|
|
return context
|
|
|
|
|
|
def municipios_atendidos(self, servico):
|
|
municipios = []
|
|
servico = servico.upper()
|
|
|
|
query = Q()
|
|
|
|
if servico != 'ALL':
|
|
for sigla in servico.split('_'):
|
|
query = query | Q(tipo_servico__sigla=sigla)
|
|
|
|
query = Q(data_desativacao=None) & query
|
|
|
|
for casa in CasaAtendida.objects.all():
|
|
if casa.servico_set.filter(query).exists():
|
|
m = casa.municipio
|
|
municipio = {'nome': casa.nome + ', ' + m.uf.sigla,
|
|
'lat': str(m.latitude),
|
|
'lng': str(m.longitude),
|
|
'servicos': "<ul><li>" + "</li><li>".join([s.tipo_servico.nome for s in casa.servico_set.filter(query)]) + "</li></ul>", }
|
|
municipios.append(municipio)
|
|
|
|
return HttpResponse(simplejson.dumps(municipios), content_type='application/json')
|
|
|
|
|
|
class CasaManifestaProtoForm(forms.Form):
|
|
fieldsets = None
|
|
informante = forms.CharField(max_length=100, required=False)
|
|
cargo = forms.CharField(max_length=100, required=False)
|
|
email = forms.EmailField(required=False)
|
|
|
|
def set_fieldsets(self, fieldsets):
|
|
result = []
|
|
for name, lines in fieldsets:
|
|
field_lines = []
|
|
for line in lines:
|
|
if isinstance(line, str):
|
|
line = (line,)
|
|
field_line = []
|
|
for field_name in line:
|
|
field = self.fields[field_name]
|
|
bf = BoundField(self, field, field_name)
|
|
field_line.append(bf)
|
|
field_lines.append(field_line)
|
|
result.append({'name': name, 'lines': field_lines},)
|
|
self.fieldsets = result
|
|
|
|
|
|
def casa_manifesta_view(request):
|
|
if 'casa_id' in request.GET:
|
|
casa_id = request.GET.get('casa_id')
|
|
casa = get_object_or_404(Orgao, pk=casa_id)
|
|
|
|
# Criar um formulário dinâmico
|
|
|
|
campos = {}
|
|
fieldsets = ((None, ('informante', 'cargo', 'email'),),)
|
|
|
|
for ts in TipoServico.objects.all():
|
|
campos['possui_%s' % ts.pk] = forms.BooleanField(label=_(u'Possui o serviço de %s') % ts.nome, required=False)
|
|
campos['url_%s' % ts.pk] = forms.URLField(label=_(u'Informe a URL'), required=False)
|
|
campos['hospedagem_interlegis_%s' % ts.pk] = forms.BooleanField(label=_(u'Serviço está hospedado no Interlegis'), required=False)
|
|
fieldsets += ((ts.nome, ('possui_%s' % ts.pk, 'url_%s' % ts.pk, 'hospedagem_interlegis_%s' % ts.pk)),)
|
|
|
|
CasaManifestaForm = type('', (CasaManifestaProtoForm,), campos)
|
|
|
|
if request.method == 'POST':
|
|
cmf = CasaManifestaForm(request.POST)
|
|
if cmf.is_valid():
|
|
thanks = []
|
|
cm, created = CasaManifesta.objects.get_or_create(casa_legislativa=casa)
|
|
cm.informante = cmf.cleaned_data['informante']
|
|
cm.cargo = cmf.cleaned_data['cargo']
|
|
cm.email = cmf.cleaned_data['email']
|
|
cm.save()
|
|
thanks.append((_(u'Informante'), cmf.cleaned_data['informante']))
|
|
thanks.append((_(u'Cargo'), cmf.cleaned_data['cargo']))
|
|
thanks.append((_(u'E-mail'), cmf.cleaned_data['email']))
|
|
for ts in TipoServico.objects.all():
|
|
if cmf.cleaned_data['possui_%s' % ts.pk]:
|
|
sm, created = ServicoManifesto.objects.get_or_create(casa_manifesta=cm, servico=ts)
|
|
sm.url = cmf.cleaned_data['url_%s' % ts.pk]
|
|
sm.hospedagem_interlegis = cmf.cleaned_data['hospedagem_interlegis_%s' % ts.pk]
|
|
sm.save()
|
|
thanks.append((ts.nome, _(u'Possui o serviço acessível em %(url)s %(obs)s') % dict(
|
|
url=sm.url,
|
|
obs=_(u'hospedado no Interlegis') if sm.hospedagem_interlegis else '')))
|
|
else:
|
|
ServicoManifesto.objects.filter(casa_manifesta=cm, servico=ts).delete()
|
|
thanks.append((ts.nome, _(u'Não possui')))
|
|
extra_context = {'casa': casa, 'thanks': thanks}
|
|
else:
|
|
extra_context = {'casa': casa, 'cmf': cmf}
|
|
else:
|
|
try:
|
|
cm = casa.casamanifesta
|
|
values = {
|
|
'informante': cm.informante,
|
|
'cargo': cm.cargo,
|
|
'email': cm.email,
|
|
}
|
|
for sm in cm.servicomanifesto_set.all():
|
|
values['possui_%s' % sm.servico.pk] = True
|
|
values['url_%s' % sm.servico.pk] = sm.url
|
|
values['hospedagem_interlegis_%s' % sm.servico.pk] = sm.hospedagem_interlegis
|
|
cmf = CasaManifestaForm(values)
|
|
except:
|
|
cmf = CasaManifestaForm()
|
|
|
|
cmf.set_fieldsets(fieldsets)
|
|
|
|
extra_context = {'casa': casa, 'cmf': cmf}
|
|
elif 'uf' in request.GET:
|
|
uf = request.GET.get('uf')
|
|
extra_context = {'casa_list': Orgao.objects.filter(municipio__uf__sigla=uf)}
|
|
else:
|
|
extra_context = {'uf_list': UnidadeFederativa.objects.all()}
|
|
|
|
return render_to_response('servicos/casa_manifesta.html', extra_context, context_instance=RequestContext(request))
|
|
|