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

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

Novo módulo com global utility que define API geral do sistema.

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