source: publico/SIGI/trunk/sigi/apps/servicos/admin.py @ 6690

Última Alteração nesse arquivo desde 6690 foi 6690, incluída por claudiomorale, 8 anos atrás

Nova APP de servicos para atender a demanda da SEIT, que deseja controlar os serviços de hospedagem que o Interlegis presta às Casas Legislativas.

  • Propriedade svn:eol-style mudada para native
  • Propriedade svn:keywords mudada para Date Revision Author HeadURL Id
File size: 6.4 KB
Linha 
1# -*- coding: utf-8 -*-
2from django.contrib import admin
3from sigi.apps.servicos.models import Servico, LogServico, CasaAtendida, TipoServico
4#from sigi.apps.casas.models import Funcionario
5from sigi.apps.casas.admin import FuncionariosInline
6from django.http import Http404, HttpResponseRedirect
7from django.forms.models import ModelForm
8from django.utils.encoding import force_unicode
9from django.utils.translation import ugettext as _
10from django.core.urlresolvers import reverse
11from apps.casas.models import CasaLegislativa
12
13#---------------- inlines ---------------------
14class LogServicoInline(admin.StackedInline):
15    model = LogServico
16    Fieldset = ((None, {'fields': (('data', 'descricao'), 'log')}))
17    extra = 1
18
19# --------------- forms -----------------------
20class ServicoFormAdmin(ModelForm):
21    class Meta:
22        model = Servico
23       
24    def __init__(self, *args, **kwargs):
25        super(ServicoFormAdmin, self).__init__(*args, **kwargs)
26       
27        self.fields['contato_tecnico'].choices = ()
28        self.fields['contato_administrativo'].choices = ()
29       
30        if self.instance.casa_legislativa_id:
31            id_casa = self.instance.casa_legislativa_id
32        elif kwargs.has_key('initial') and kwargs['initial'].has_key('id_casa'):
33            id_casa = kwargs['initial']['id_casa']
34            self.instance.casa_legislativa_id = id_casa
35        else:
36            id_casa = None
37           
38        if id_casa:
39            casa = CasaAtendida.objects.get(pk=id_casa)
40            contatos = [(f.id, unicode(f)) for f in casa.funcionario_set.all()]
41            self.fields['contato_tecnico'].choices = contatos
42            self.fields['contato_administrativo'].choices = contatos
43       
44#---------------- admins ----------------------
45class TipoServicoAdmin(admin.ModelAdmin):
46    list_display = ('id', 'sigla', 'nome', )
47    ordering = ['id']
48   
49class ServicoAdmin(admin.ModelAdmin):
50    form = ServicoFormAdmin
51    list_display = ('casa_legislativa', 'tipo_servico', 'hospedagem_interlegis', 'data_ativacao', 'data_desativacao',)
52    fieldsets = (( None, {
53                    'fields': ('casa_legislativa', 'data_ativacao',)
54                 }),
55                 ( 'Serviço', {
56                    'fields': ('tipo_servico', ('url', 'hospedagem_interlegis'), ('nome_servidor', 'porta_servico', 'senha_inicial'),)
57                 }),
58                 ( 'Contatos', {
59                    'fields': ('contato_tecnico', 'contato_administrativo',)
60                 }),
61                 ( 'Alterações', {
62                    'fields': ('data_alteracao', 'data_desativacao', 'motivo_desativacao',)
63                }))
64    readonly_fields = ('casa_legislativa', 'data_ativacao', 'data_alteracao')
65
66    inlines = (LogServicoInline,)
67   
68    def add_view(self, request, form_url='', extra_context=None):
69        id_casa = request.GET.get('id_casa', None)
70
71        if not id_casa:
72            raise Http404
73       
74        return super(ServicoAdmin, self).add_view(request, form_url, extra_context=extra_context)
75   
76    def response_add(self, request, obj):
77        opts = obj._meta
78        msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
79       
80        if request.POST.has_key("_addanother"):
81            self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
82            return HttpResponseRedirect(request.path + '?id_casa=%s' % (obj.casa_legislativa.id,))
83        elif request.POST.has_key("_save"):
84            self.message_user(request, msg)
85            return HttpResponseRedirect(reverse('admin:servicos_casaatendida_change', args=[obj.casa_legislativa.id]))
86       
87        return super(ServicoAdmin, self).response_add(request, obj)   
88       
89    def response_change(self, request, obj):
90        opts = obj._meta
91        msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
92       
93        if request.POST.has_key("_addanother"):
94            self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
95            return HttpResponseRedirect("../add/?id_casa=%s" % (obj.casa_legislativa.id,))
96        elif request.POST.has_key("_save"):
97            self.message_user(request, msg)
98            return HttpResponseRedirect(reverse('admin:servicos_casaatendida_change', args=[obj.casa_legislativa.id]))
99       
100        return super(ServicoAdmin, self).response_change(request, obj)
101   
102    def save_form(self, request, form, change):
103        obj = super( ServicoAdmin, self).save_form(request, form, change)
104       
105        if not change:
106            id_casa = request.GET.get('id_casa', None)
107
108            if not id_casa:           
109                raise Http404
110
111            obj.casa_legislativa = CasaAtendida.objects.get(pk=id_casa)
112
113        return obj
114
115class ContatosInline(FuncionariosInline):
116    can_delete = False # Equipe do SEIT não pode excluir pessoas de contato
117               
118class CasaAtendidaAdmin(admin.ModelAdmin):
119    actions = None
120    list_display = ('codigo_interlegis', 'nome', 'servicos',)
121    ordering = ['nome']
122    fieldsets = (
123                 ('Casa legislativa', {
124                    'fields': (('codigo_interlegis', 'nome'),  ('logradouro', 'bairro', 'municipio', 'cep'), ('email', 'pagina_web'))
125                    })
126                ,)
127    readonly_fields = ('nome',  'logradouro', 'bairro', 'municipio', 'cep')
128    inlines = (ContatosInline,)
129    list_filter = ('tipo', 'municipio')
130    search_fields = ('search_text','cnpj', 'bairro', 'logradouro',
131                     'cep', 'municipio__nome', 'municipio__uf__nome',
132                     'municipio__codigo_ibge', 'pagina_web', 'observacoes')
133
134    def change_view(self, request, object_id, extra_context=None):
135        # Se a Casa ainda não é atendida, gerar o código interlegis para ela
136        # Assim ela passa a ser uma casa atendida
137        casa = CasaLegislativa.objects.get(id=object_id)
138
139        if casa.codigo_interlegis == '':
140            casa.gerarCodigoInterlegis()
141           
142        return super(CasaAtendidaAdmin, self).change_view(request, object_id, extra_context=extra_context)
143   
144    def has_add_permission(self, request):
145        return False # Nunca é permitido inserir uma nova Casa Legislativa por aqui
146   
147    def has_delete_permission(self, request, obj=None):
148        return False # Nunca deletar casas por aqui
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.