source: publico/il.spdo/trunk/il/spdo/interfaces.py @ 5376

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

Inclusão de sigla na interface IArea e campos de listagem de areas e
pessoas com Widget de autocomplete.

File size: 8.5 KB
Linha 
1# -*- coding: utf-8 -*-
2
3from zope import interface, schema
4from plone.directives import form
5from collective.z3cform.datetimewidget import DateFieldWidget
6
7from plone.formwidget.multifile import MultiFileFieldWidget
8from plone.namedfile.field import NamedFile
9from plone.formwidget.autocomplete import AutocompleteFieldWidget
10from plone.formwidget.autocomplete import AutocompleteMultiFieldWidget
11
12from il.spdo.config import MessageFactory as _
13
14class ITipoDocumento(form.Schema):
15
16    nome = schema.TextLine(
17        title=_(u'Nome'),
18        description=_(u'Informe o nome do tipo do documento.'))
19
20class IArea(form.Schema):
21
22    form.mode(id='hidden')
23    id = schema.Int(
24        title=_(u'ID'),
25        description=_(u'Identidicador da Área.'),
26        required=False)
27
28    sigla = schema.TextLine(
29        title=_(u'Sigla'),
30        description=_(u'Informe a sigla da  Área.'),
31        max_length=100)
32   
33    nome = schema.TextLine(
34        title=_(u'Nome'),
35        description=_(u'Informe o nome da Área.'),
36        max_length=100)
37
38    chefia_id = schema.Choice(
39        title=_(u'Chefia'),
40        description=_(u'Selecione a área de chefia.'),
41        required=False,
42        vocabulary='il.spdo.areas-vocab')
43
44    # TODO: validar também os ciclos, impedindo que uma área escolha
45    # como área pai qualquer um dos seus descendentes
46    @interface.invariant
47    def vefifyAreaPai(area):
48        if area.id and area.chefia_id and area.id == area.chefia_id:
49            raise interface.Invalid(_(u'Área de chefia não pode ser ela mesma.'))
50
51class IPessoa(form.Schema):
52    """Define um tipo Pessoa que pode ser física ou jurídica.
53    """
54    form.fieldset('endereco',
55            label=u"Endereço",
56            fields=['endereco', 'bairro', 'cep', 'cidade', 'uf_id']
57        )
58
59    form.fieldset('lotacao',
60            label=u"Lotação",
61            fields=['area_id']
62        )
63
64    form.mode(id='hidden')
65    id = schema.Int(
66        title=_(u'ID'),
67        description=_(u'Identidicador interno da Pessoa.'),
68        required=False)
69
70    nome = schema.TextLine(
71        title=_(u'Nome'),
72        description=_(u'Nome completo da Pessoa.'),
73        max_length=100)
74
75    email = schema.TextLine(
76        title=_(u'Email'),
77        description=_(u'Informe o email da Pessoa.'),
78        max_length=50)
79
80    tipopessoa = schema.Choice(
81        title=_(u'Tipo Pessoa'),
82        description=_(u'Informe se a pessoa é física ou jurídica.'),
83        default=u'F',
84        vocabulary='il.spdo.tipopessoa-vocab')
85
86    cpf_cnpj = schema.TextLine(
87        title=_(u'CPF/CNPJ'),
88        description=_(u'Informe o CPF ou CNPJ de acordo com o tipo de pessoa: física ou organização.'),
89        max_length=20,
90        required=False)
91
92    contato = schema.TextLine(
93        title=_(u'Contato'),
94        description=_(u'Pessoa ou organização de contato.'),
95        max_length=100,
96        required=False)
97
98    telefone = schema.TextLine(
99        title=_(u'Telefone'),
100        description=_(u'Informe o telefone com DDD.'),
101        max_length=30,
102        required=False)
103
104    form.widget(area_id=AutocompleteFieldWidget)
105    area_id = schema.Choice(
106        title=_(u'Área'),
107        description=_(u'Área da instituição que a pessoa faz parte.'),
108        required=False,
109        vocabulary='il.spdo.areas-vocab')
110
111    endereco = schema.TextLine(
112        title=_(u'Endereço'),
113        description=_(u'Logradouro, número e complemento.'),
114        max_length=100,
115        required=False)
116
117    bairro = schema.TextLine(
118        title=_(u'Bairro'),
119        description=_(u'Informe o bairro.'),
120        max_length=50,
121        required=False)
122
123    cep = schema.TextLine(
124        title=_(u'CEP'),
125        description=_(u'Informe o CEP: apenas os números'),
126        max_length=8,
127        min_length=8,
128        required=False)
129
130    cidade = schema.TextLine(
131        title=_(u'Cidade'),
132        description=_(u'Informe a cidade.'),
133        max_length=50,
134        required=False)
135
136    uf_id = schema.Choice(
137        title=_(u'UF'),
138        description=_(u'Selecione o estado da federação.'),
139        required=False,
140        vocabulary='il.spdo.uf-vocab')
141
142
143class IAddProtocolo(form.Schema):
144
145    form.mode(id='hidden')
146    id = schema.Int(
147        title=_(u'ID'),
148        description=_(u'Identidicador interno do Protocolo.'),
149        required=False)
150
151    tipoprotocolo = schema.Choice(
152        title=_(u'Tipo Protocolo'),
153        description=_(u'Selecione o tipo do protocolo.'),
154        vocabulary='il.spdo.tipoprotocolo-vocab')
155
156    tipodocumento_id = schema.Choice(
157        title=_(u'Tipo Documento'),
158        description=_(u'Selecione o tipo do documento.'),
159        vocabulary='il.spdo.tipodocumento-vocab')
160
161    numero_documento = schema.TextLine(
162        title=_(u'Número do Documento'),
163        description=_(u'Informe o número do documento.'),
164        max_length=20,
165        required=False)
166
167    #TODO:validar a data pois não pode ser no futuro.
168    form.widget(data_emissao=DateFieldWidget)
169    data_emissao = schema.Date(
170        title=_(u'Data Emissão Documento'),
171        description=_(u'Informe a data de emissão do documento.'),
172        default=None,
173        required=False)
174
175    assunto = schema.TextLine(
176        title=_(u'Assunto'),
177        description=_(u'Informe o assunto do documento.'),
178        max_length=100)
179
180    situacao_id = schema.Choice(
181        title=_(u'Situação'),
182        description=_(u'Selecione a situação inicial do protocolo.'),
183        vocabulary='il.spdo.situacao-vocab')
184
185    form.widget(origem=AutocompleteMultiFieldWidget)
186    origem = schema.List(
187            title=_(u'Origem'),
188            description=_(u'Selecione uma ou mais origens do protocolo.'),
189            value_type=schema.Choice(title=_(u'Pessoa Origem'),
190                                     vocabulary='il.spdo.pessoa-vocab')
191                    )
192
193    form.widget(destino=AutocompleteMultiFieldWidget)
194    destino = schema.List(
195            title=_(u'Destino'),
196            description=_(u'Selecione um ou mais destinos do protocolo.'),
197            value_type=schema.Choice(title=_(u'Pessoa Destino'),
198                                     vocabulary='il.spdo.pessoa-vocab')
199                    )
200
201    observacao = schema.Text(
202        title=_(u'Observação'),
203        description=_(u'Informe qualquer observação que seja necessária.'),
204        required=False)
205
206    # Para desabilitar o plugin de flash upload, basta comentar a linha abaixo.
207    form.widget(anexos=MultiFileFieldWidget)
208    anexos = schema.List(title=_(u'Anexos'),
209                         description=_(u'Adicione anexos ao protocolo caso necessário.'),
210                         required=False,
211                         value_type=NamedFile())
212
213class IShowProtocolo(IAddProtocolo):
214    numero = schema.TextLine(
215        title=_(u'Número'),
216        description=_(u'Identificador do Protocolo.'),
217        max_length=20,
218        required=False)
219
220class IProtocolo(IShowProtocolo):
221    pass
222
223
224class IAddTramite(form.Schema):
225    form.mode(id='hidden')
226    id = schema.Int(
227        title=_(u'ID'),
228        description=_(u'Identidicador interno do Tramite.'),
229        required=False)
230
231    form.widget(areas=AutocompleteMultiFieldWidget)
232    areas = schema.List(
233        title=_(u'Área'),
234        description=_(u'Área para a qual o protocolo deve tramitar.'),
235        value_type=schema.Choice(vocabulary='il.spdo.areas-vocab'))
236
237    acao = schema.Text(
238        title=_(u'Ação'),
239        description=_(u'Descreva as ações que devem ser tormadas para a tramitação prosseguir.'),
240        required=False)
241
242    # Para desabilitar o plugin de flash upload, basta comentar a linha abaixo.
243    form.widget(anexos=MultiFileFieldWidget)
244    anexos = schema.List(title=_(u'Anexos'),
245                         description=_(u'Adicione anexos ao protocolo caso necessário.'),
246                         required=False,
247                         value_type=NamedFile())
248   
249@form.validator(field=IAddTramite['areas'])
250def validateAreaDestino(value):
251    if not value:
252        raise interface.Invalid(_(u'Ao menos uma área de destino deve ser informada.'))
253
254@form.validator(field=IAddProtocolo['origem'])
255def validateOrigem(value):
256    if not value:
257        raise interface.Invalid(_(u'Ao menos uma origem deve ser informada.'))
258
259@form.validator(field=IAddProtocolo['destino'])
260def validate(value):
261    if not value:
262        raise interface.Invalid(_(u'Ao menos um destino deve ser informado.'))
263
264class IShowProtocolo(IAddProtocolo):
265    numero = schema.TextLine(
266        title=_(u'Número'),
267        description=_(u'Identificador do Protocolo.'),
268        max_length=20,
269        required=False)
270
271class IProtocolo(IShowProtocolo):
272    pass
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.