source: publico/il.spdo/trunk/il/spdo/browser/forms/protocolo.py @ 5448

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

Adicionado formularios para situacao, tipo de documento e entrega, uf. Revisado formularios de protocolo, tramite.

File size: 3.5 KB
Linha 
1# -*- coding: utf-8 -*-
2
3# TODO: revisar imports
4import datetime
5from five import grok
6from zope.component import getUtility
7from plone.app.layout.navigation.interfaces import INavigationRoot
8from Products.statusmessages.interfaces import IStatusMessage
9from il.spdo.browser.forms import base
10from il.spdo.config import MessageFactory as _
11from il.spdo.interfaces import IAddProtocolo
12from il.spdo import db
13from il.spdo.config import Session, PATH_ANEXOS
14from il.spdo.api import ISPDOAPI
15
16class ProtocoloAddForm(base.AddForm):
17    """Formulário de cadastro de um Protocolo.
18    """
19
20    grok.context(INavigationRoot)
21    grok.name('add-protocolo')
22    grok.require('cmf.ManagePortal')
23
24    schema = IAddProtocolo
25    label = _(u'Novo Protocolo')
26    description = _(u'Formulário de cadastro de Protocolo.')
27
28    # TODO: revisar e refatorar esse método, transferindo toda lógica
29    # para a API. Esse metodo deve ficar semelhante aos demais métodos
30    # createAndAdd dos demais formularios
31    def createAndAdd(self, data):
32        api = getUtility(ISPDOAPI)
33        user = api.getUser()
34        protocolo = db.Protocolo(
35                data['tipoprotocolo'],
36                data['tipodocumento_id'],
37                data['numero_documento'],
38                data['data_emissao'],
39                data['assunto'],
40                data['situacao_id']
41            )
42        session = Session()
43        session.add(protocolo)
44        session.flush()
45        self.request.set('protocolo_id', str(protocolo.id))
46
47        observacao = None
48        if data['observacao']:
49            observacao = db.Observacao(
50                    protocolo_id=protocolo.id,
51                    texto=data['observacao'],
52                )
53            session.add(observacao)
54
55        tramite = db.Tramite(
56            protocolo_id=protocolo.id,
57            area_id=user.area_id,
58            data_disponibilizacao=None,
59            data_recebimento=datetime.datetime.now(),
60            acao=_(u'Protocolo Criado')
61            )
62        session.add(tramite)
63        session.flush()
64
65        log = db.LogModificacao(
66                usuario=user.email,
67                protocolo_id=protocolo.id,
68                tramite_id=tramite.id,
69                observacao_id=observacao.id if observacao is not None else None,
70                detalhes=_(u'Novo Protocolo')
71            )
72        session.add(log)
73
74        anexos = data['anexos'] if data['anexos'] is not None else []
75        if anexos:
76            api.addAnexos(protocolo.id, anexos)
77
78        pessoas_origem = data['origem']
79        pessoas_destino = data['destino']
80        for pessoa_id in pessoas_origem:
81            pessoa_origem = db.PessoaOrigem(
82                    protocolo_id=protocolo.id,
83                    pessoa_id=pessoa_id,
84                )
85            session.add(pessoa_origem)
86
87        for pessoa_id in pessoas_destino:
88            pessoa_destino = db.PessoaDestino(
89                    protocolo_id=protocolo.id,
90                    pessoa_id=pessoa_id,
91                )
92            session.add(pessoa_destino)
93
94        return protocolo
95
96    # TODO: revisar. Evitar criar atributos nas instancias de views ou
97    # formularios. Ao invez disso, criar atributos no request, que tem
98    # comportamento transciente.
99    def nextURL(self):
100        url_base = self.context.absolute_url()
101        pi = getattr(self.request, 'protocolo_id', None)
102        if pi is not None:
103            self.redirect(url_base + '/@@show-protocolo?id=' + pi)
104        else:
105            self.redirect(url_base + '/@@list-protocolo')
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.