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

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

Revisado view de areas. Adicionado views para tipo de documento, tipo de entrega, uf, situacao.

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