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

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

Finalização do cadastro de protocolo: validação das pessoas de origem
e destino, registro das permissoes.

File size: 4.2 KB
Linha 
1# -*- coding: utf-8 -*-
2import os
3import datetime
4
5from five import grok
6from zope.component import getMultiAdapter
7
8from plone.app.layout.navigation.interfaces import INavigationRoot
9from Products.statusmessages.interfaces import IStatusMessage
10
11from il.spdo.browser.forms import base
12from il.spdo.config import MessageFactory as _
13from il.spdo.interfaces import IAddProtocolo
14from il.spdo import db
15from il.spdo.config import Session, PATH_ANEXOS
16
17class ProtocoloAddForm(base.AddForm):
18    """Formulário de cadastro de um Protocolo.
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    def createAndAdd(self, data):
29        protocolo = db.Protocolo(
30                data['tipoprotocolo'],
31                data['tipodocumento_id'],
32                data['numero_documento'],
33                data['data_emissao'],
34                data['assunto'],
35                data['situacao_id']
36            )
37        session = Session()
38        session.add(protocolo)
39        session.flush()
40        self.protocolo_id = protocolo.id
41
42        portal_state = getMultiAdapter((self.context, self.request),
43                                        name=u'plone_portal_state')
44        user_id = portal_state.member().getId()
45        user = session.query(db.Pessoa).filter_by(email=user_id).first()
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_id,
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'Cadastro de novo protocolo.')
71            )
72        session.add(log)
73
74        #inicializa a path dos anexos do protocolo
75        path_protocolo = os.path.join(PATH_ANEXOS, str(protocolo.ano), str(protocolo.id))
76        os.makedirs(path_protocolo, 0700)
77
78        anexos = data['anexos'] if data['anexos'] is not None else []
79        for arquivo in anexos:
80            anexo = db.Anexo(
81                    protocolo_id=protocolo.id,
82                    tamanho=arquivo.getSize(),
83                    arquivo=arquivo.filename,
84                )
85           
86            session.add(anexo)
87            session.flush()
88
89            log = db.LogModificacao(
90                    usuario=user_id,
91                    protocolo_id=protocolo.id,
92                    anexo_id=anexo.id,
93                    detalhes=_(u'Anexo criado: %s' % anexo.arquivo)
94                )
95            session.add(log)
96
97            path_anexo = os.path.join(path_protocolo, str(anexo.id))
98            with open(path_anexo, 'w') as file_anexo:
99                file_anexo.write(arquivo.data)
100
101        pessoas_origem = data['origem']
102        pessoas_destino = data['destino']
103        for pessoa_id in pessoas_origem:
104            pessoa_origem = db.PessoaOrigem(
105                    protocolo_id=protocolo.id,
106                    pessoa_id=pessoa_id,
107                )
108            session.add(pessoa_origem)
109
110        for pessoa_id in pessoas_destino:
111            pessoa_destino = db.PessoaDestino(
112                    protocolo_id=protocolo.id,
113                    pessoa_id=pessoa_id,
114                )
115            session.add(pessoa_destino)
116
117        permissao = db.Permissao(
118                protocolo_id=protocolo.id,
119                area_id=user.area.id,
120                leitura=True,
121                escrita=True,
122            )
123        session.add(permissao)
124
125        return protocolo
126
127    def nextURL(self):
128        url_base = self.context.absolute_url()
129        self.redirect(url_base + '/@@show-protocolo?id=' + str(self.protocolo_id))
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.