source: publico/il.spdo/trunk/il/spdo/browser/views.py @ 5441

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

Adicionado listagem de pessoas no menu de tabelas auxiliares.

File size: 7.1 KB
Linha 
1# -*- coding: utf-8 -*-
2
3from five import grok
4from zope.component import getUtility
5from zope.schema.interfaces import IVocabularyFactory
6from plone.app.layout.navigation.interfaces import INavigationRoot
7from plone.namedfile.utils import set_headers, stream_data
8from plone.namedfile.file import NamedFile
9from Products.statusmessages.interfaces import IStatusMessage
10from Products.Five.browser import BrowserView
11from il.spdo.config import Session
12from il.spdo.api import ISPDOAPI
13from il.spdo.config import MessageFactory as _
14from il.spdo.db import Area, Pessoa, TipoDocumento, Protocolo, Observacao, Tramite
15
16class AreaListView(grok.View):
17
18    grok.name('list-area')
19    grok.context(INavigationRoot)
20    grok.require('cmf.ManagePortal')
21
22    dados = []
23
24    def update(self):
25        session = Session()
26        items = session.query(Area).all()
27        self.dados = []
28        for i in items:
29            self.dados.append({
30               'id': i.id,
31               'nome': i.nome,
32               'chefia_id': i.chefia_id,
33               'chefia_nome': getattr(i.area,'nome','')
34               })
35   
36    def show_url(self, id):
37        return self.context.absolute_url() + '/@@show-area?id=%s' % id
38
39    def add_url(self):
40        return self.context.absolute_url() + '/@@add-area'
41
42
43class PessoaListView(grok.View):
44   
45    grok.name('list-pessoa')
46    grok.context(INavigationRoot)
47    grok.require('cmf.ManagePortal')
48
49    dados = []
50
51    def update(self):
52        session = Session()
53        items = session.query(Pessoa).all()
54        self.dados = []
55        for i in items:
56            self.dados.append({
57               'id': i.id,
58               'nome': i.nome,
59               'email': i.email,
60               })
61   
62    def show_url(self, id):
63        return self.context.absolute_url() + '/@@show-pessoa?id=%s' % id
64
65    def add_url(self):
66        return self.context.absolute_url() + '/@@add-pessoa'
67
68
69class TipoDocumentoListView(grok.View):
70
71    grok.name('list-tipodocumento')
72    grok.context(INavigationRoot)
73    grok.require('cmf.ManagePortal')
74
75    dados = []
76
77    def update(self):
78        session = Session()
79        items = session.query(TipoDocumento).all()
80        self.dados = []
81        for i in items:
82            self.dados.append({
83               'id': i.id,
84               'nome': i.nome,
85               })
86   
87    def show_url(self, id):
88        return self.context.absolute_url() + '/@@show-tipodocumento?id=%s' % id
89
90    def add_url(self):
91        return self.context.absolute_url() + '/@@add-tipodocumento'
92
93
94class DownloadAnexoView(grok.View):
95
96    grok.name('download-anexo')
97    grok.context(INavigationRoot)
98    grok.require('cmf.ManagePortal')
99
100    def update(self):
101        anexo_id = self.request.get('anexo_id', None)
102        if anexo_id is None:
103            #TODO: incluir mensagem
104            return self.request.response.redirect(self.context.absolute_url())
105
106        self.api = getUtility(ISPDOAPI)
107        self.anexo = self.api.getAnexo(anexo_id)
108        if not self.anexo:
109            #TODO: incluir mensagem
110            return self.request.response.redirect(self.context.absolute_url())
111
112    def render(self):
113        file_anexo = self.api.getFileAnexo(self.anexo)
114        file_anexo = NamedFile(file_anexo, filename=self.anexo.arquivo)
115        set_headers(file_anexo, self.request.response)
116        #cd = 'inline; filename=%s' % self.anexo.arquivo
117        #self.request.response.setHeader('Content-Disposition', cd)
118        return stream_data(file_anexo)
119
120
121class ProtocoloShowView(grok.View):
122    grok.name('show-protocolo')
123    grok.context(INavigationRoot)
124    grok.require('cmf.ManagePortal')
125
126    def url_pessoa(self, id):
127        return self.context.absolute_url() + '/show-pessoa?id=' + str(id)
128
129    @property
130    def outros_url(self):
131        return self.context.absolute_url() + '/show-outros-protocolo?id=' + str(self._protocolo.id)
132
133    @property
134    def tipo_protocolo(self):
135        tipo_proto_vocab_factory = getUtility(IVocabularyFactory, 'il.spdo.tipoprotocolo-vocab')
136        tipo_proto_vocab = tipo_proto_vocab_factory(self.context)
137        return tipo_proto_vocab.getTerm(self._protocolo.tipoprotocolo).title
138
139    @property
140    def origem(self):
141        return self._protocolo.pessoa_origem[0].pessoa.nome
142
143    @property
144    def origem_url(self):
145        return self.url_pessoa(self._protocolo.pessoa_origem[0].pessoa_id)
146
147    @property
148    def destino(self):
149        return self._protocolo.pessoa_destino[0].pessoa.nome
150
151    @property
152    def destino_url(self):
153        return self.url_pessoa(self._protocolo.pessoa_destino[0].pessoa_id)
154
155    @property
156    def outros_origem(self):
157        return len(self._protocolo.pessoa_origem) > 1
158
159    @property
160    def outros_destino(self):
161        return len(self._protocolo.pessoa_destino) > 1
162
163    def observacoes(self):
164        session = Session()
165        query = session.query(Observacao)
166        query = query.filter(Observacao.protocolo_id==self._protocolo.id)
167        items = query.order_by(Observacao.id).all()
168        result = []
169        for observacao in items:
170            result.append({
171                'texto':observacao.texto,
172                'data':observacao.data,
173                })
174        return result
175
176    def anexos(self):
177        anexos = self._protocolo.anexo
178        result = []
179        for anexo in anexos:
180            result.append({
181                'data':anexo.data,
182                'tamanho':anexo.tamanho,
183                'nome':anexo.arquivo,
184                'download_url':self.context.absolute_url() + '/@@download-anexo?anexo_id=' + str(anexo.id),
185            })
186        return result
187       
188    def tramites(self):
189        session = Session()
190        query = session.query(Tramite)
191        query = query.filter(Tramite.protocolo_id==self._protocolo.id)
192        items = query.order_by(Tramite.id).all()
193        result = []
194        for tramite in items:
195            result.append({
196               'data_disponibilizacao':tramite.data_disponibilizacao,
197               'data_recebimento':tramite.data_recebimento,
198               'area':tramite.area.sigla,
199               'nome_responsavel':tramite.responsavel.pessoa.nome,
200               'responsavel_id':tramite.responsavel.pessoa_id,
201               'acao':tramite.acao,
202               })
203        return result
204           
205    @property
206    def protocolo(self):
207        tipo_proto_vocab_factory = getUtility(IVocabularyFactory, 'il.spdo.tipoprotocolo-vocab')
208        tipo_proto_vocab = tipo_proto_vocab_factory(self.context)
209        return {'id':self._protocolo.id,
210                'numero':self._protocolo.numero,
211                'data':self._protocolo.data,
212                'situacao':self._protocolo.situacao.nome,
213                'numero_documento':self._protocolo.numero_documento,
214                'data_emissao':self._protocolo.data_emissao,
215                'assunto':self._protocolo.assunto,
216            }
217
218    def update(self):
219        self.api = getUtility(ISPDOAPI)
220        self._protocolo = self.api.getProtocolo()
221        if self._protocolo is None:
222            status = IStatusMessage(self.request)
223            status.add(_(u'Protocolo não localizado'), 'warn')
224            return self.request.response.redirect(self.context.absolute_url())
225
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.