source: publico/ILCertificador/trunk/EventoCertificado.py @ 2709

Última Alteração nesse arquivo desde 2709 foi 2709, incluída por jeanferri, 14 anos atrás

Corrigidos todos os módulos baseados em ILCertificados para ILCertificador

File size: 12.6 KB
Linha 
1# -*- coding: utf-8 -*-
2#
3# File: EventoCertificado.py
4#
5# Copyright (c) 2006 by Interlegis
6# Generator: ArchGenXML
7#            http://plone.org/products/archgenxml
8#
9# GNU General Public License (GPL)
10#
11# This program is free software; you can redistribute it and/or
12# modify it under the terms of the GNU General Public License
13# as published by the Free Software Foundation; either version 2
14# of the License, or (at your option) any later version.
15#
16# This program is distributed in the hope that it will be useful,
17# but WITHOUT ANY WARRANTY; without even the implied warranty of
18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19# GNU General Public License for more details.
20#
21# You should have received a copy of the GNU General Public License
22# along with this program; if not, write to the Free Software
23# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24# 02110-1301, USA.
25#
26
27__author__ = """STC Interlegis <admin-stc@interlegis.gov.br>"""
28__docformat__ = 'plaintext'
29
30from AccessControl import ClassSecurityInfo
31from Products.Archetypes.atapi import *
32from Products.ILCertificador.config import *
33
34##code-section module-header #fill in your manual code here
35import csv
36from Products.CMFCore.utils import getToolByName
37from Products.Archetypes import transaction
38##/code-section module-header
39
40schema = Schema((
41
42    TextField(
43        name='texto',
44        default="""Participou <papel>como</papel>do <tipo> "<titulo>", realizado no <local>, no período <periodo>, com carga horária de <duracao><verso>.""",
45        widget=TextAreaWidget(
46            description="Descreva a declaração que será utilizada na face do certificado. Você pode manipular livremente este texto. Utilize as marcas para inserir os atributos do evento e do certificado no texto, conforme o exemplo. As seguintes marcas poderão ser utilizadas: <b>&lt;papel&gt;frase&lt;/papel&gt;</b>: Papel do participante do evento, será utilizado somente se o papel for diferente de 'participante', onde frase é um texto de livre edição que antecede o papel; <b>&lt;tipo&gt;</b>: O tipo de evento; <b>&lt;titulo&gt;</b>: O título do evento; <b>&lt;local&gt;</b>: Local em que ocorreu o evento; <b>&lt;periodo&gt;</b>: Período em que ocorreu o evento; <b>&lt;duracao&gt;</b>: Duração da programação do evento; <b>&lt;verso&gt;</b>: Se o certificado tem a programação no verso, será impresso uma nota no texto sobre o verso do certificado.",
47            label='Texto',
48            label_msgid='ILCertificador_label_texto',
49            description_msgid='ILCertificador_help_texto',
50            i18n_domain='ILCertificador',
51        ),
52        required=1
53    ),
54
55    StringField(
56        name='tipo',
57        widget=SelectionWidget(
58            description="Selecione o tipo do evento. Será utilizado no corpo do certificado.",
59            label='Tipo',
60            label_msgid='ILCertificador_label_tipo',
61            description_msgid='ILCertificador_help_tipo',
62            i18n_domain='ILCertificador',
63        ),
64        vocabulary='getTiposEvento'
65    ),
66
67    StringField(
68        name='local',
69        widget=StringWidget(
70            description="Informe o local do evento. Será utilizado no corpo do certificado.",
71            label='Local',
72            label_msgid='ILCertificador_label_local',
73            description_msgid='ILCertificador_help_local',
74            i18n_domain='ILCertificador',
75        )
76    ),
77
78    StringField(
79        name='periodo',
80        widget=StringWidget(
81            label="Período",
82            description="Informe o período de realização do evento. Será utilizado no corpo do certificado.",
83            label_msgid='ILCertificador_label_periodo',
84            description_msgid='ILCertificador_help_periodo',
85            i18n_domain='ILCertificador',
86        )
87    ),
88
89    StringField(
90        name='duracao',
91        widget=StringWidget(
92            label="Duração",
93            description="Informe a duração do evento. Será utilizado no corpo do certificado.",
94            size="10",
95            label_msgid='ILCertificador_label_duracao',
96            description_msgid='ILCertificador_help_duracao',
97            i18n_domain='ILCertificador',
98        )
99    ),
100
101    LinesField(
102        name='programa',
103        widget=LinesWidget(
104            description="Descreva o programa do evento. Será utilizado no verso do certificado.",
105            label='Programa',
106            label_msgid='ILCertificador_label_programa',
107            description_msgid='ILCertificador_help_programa',
108            i18n_domain='ILCertificador',
109        )
110    ),
111
112    StringField(
113        name='validacao',
114        default="Frente",
115        widget=SelectionWidget(
116            label='Validacao',
117            label_msgid='ILCertificador_label_validacao',
118            i18n_domain='ILCertificador',
119        ),
120        enforceVocabulary=1,
121        vocabulary=['Nenhum', 'Frente', 'Verso']
122    ),
123
124    ReferenceField(
125        name='template',
126        widget=ReferenceWidget(
127            description="Selecione o template que você deseja utilizar para compor o layout do certificado desse evento.",
128            label='Template',
129            label_msgid='ILCertificador_label_template',
130            description_msgid='ILCertificador_help_template',
131            i18n_domain='ILCertificador',
132        ),
133        allowed_types=('TemplateCertificado',),
134        multiValued=0,
135        relationship='evento_template',
136        required=1
137    ),
138
139    ReferenceField(
140        name='assinaturas_frente',
141        widget=ReferenceWidget(
142            description="Selecione as assinaturas que você deseja que sejam anexadas na face do certificado desse evento.",
143            label="Assinaturas Frente",
144            label_msgid='ILCertificador_label_assinaturas_frente',
145            description_msgid='ILCertificador_help_assinaturas_frente',
146            i18n_domain='ILCertificador',
147        ),
148        allowed_types=('AssinaturaCertificado',),
149        multiValued=1,
150        relationship='evento_assinaturas_frente',
151        required=1
152    ),
153
154    ReferenceField(
155        name='assinaturas_verso',
156        widget=ReferenceWidget(
157            label="Assinaturas Verso",
158            description="Selecione as assinaturas que você deseja que sejam anexadas no verso do certificado desse evento. Somente serão utilizadas se você descrever o texto do programa.",
159            label_msgid='ILCertificador_label_assinaturas_verso',
160            description_msgid='ILCertificador_help_assinaturas_verso',
161            i18n_domain='ILCertificador',
162        ),
163        allowed_types=('AssinaturaCertificado',),
164        multiValued=1,
165        relationship='evento_assinaturas_verso'
166    ),
167
168),
169)
170
171##code-section after-local-schema #fill in your manual code here
172##/code-section after-local-schema
173
174EventoCertificado_schema = BaseBTreeFolderSchema.copy() + \
175    schema.copy()
176
177##code-section after-schema #fill in your manual code here
178##/code-section after-schema
179
180class EventoCertificado(BaseBTreeFolder):
181    """Evento do qual as pessoas participaram. Contém a maior parte
182    das informações do certificado que é emitido para cada pessoa
183    que participou desse evento. Após sua conclusão será
184    inalterável.
185    """
186    security = ClassSecurityInfo()
187    __implements__ = (getattr(BaseBTreeFolder,'__implements__',()),)
188
189    # This name appears in the 'add' box
190    archetype_name = 'Evento Certificado'
191
192    meta_type = 'EventoCertificado'
193    portal_type = 'EventoCertificado'
194    allowed_content_types = ['Certificado']
195    filter_content_types = 1
196    global_allow = 0
197    content_icon = 'evento_certificado_icon.gif'
198    immediate_view = 'evento_certificado_view'
199    default_view = 'evento_certificado_view'
200    suppl_views = ()
201    typeDescription = "Evento do qual as pessoas participaram. Contém a maior parte das informações do certificado que é emitido para cada pessoa que participou desse evento. Após sua conclusão será inalterável."
202    typeDescMsgId = 'description_edit_eventocertificado'
203
204
205    actions =  (
206
207
208       {'action': "string:${object_url}/evento_certificado_view",
209        'category': "object",
210        'id': 'view',
211        'name': 'View',
212        'permissions': ("View",),
213        'condition': 'python:1'
214       },
215
216
217       {'action': "string:${object_url}/certificado_import_form",
218        'category': "object",
219        'id': 'certificado_import_form',
220        'name': 'Importação',
221        'permissions': ("ILCertificados: Add Certificado",),
222        'condition': 'python:1'
223       },
224
225
226    )
227
228    _at_rename_after_creation = True
229
230    schema = EventoCertificado_schema
231
232    ##code-section class-header #fill in your manual code here
233    ##/code-section class-header
234
235    # Methods
236
237    # Manually created methods
238
239    security.declarePrivate('getTiposEvento')
240    def getTiposEvento(self):
241        """Retorna os tipos de evento cadastrados na pasta de certificados.
242        """
243        parent = self.aq_inner.aq_parent
244        return parent.getTipos_evento()
245
246    security.declarePrivate('getTextoCertificado')
247    def getTextoCertificado(self, certificado):
248        """Retorna o texto da declaração do certificado. Esse texto é composto
249        no campo texto e pode conter algumas tags que serão substituídas pelo
250        valor de seus respectivos atributos. Essas tags são:
251
252        <papel>frase</papel>: Papel do participante do evento, será utilizado
253        somente se o papel for diferente de 'participante', onde frase é um
254        texto de livre edição que antecede o papel.
255        <tipo>: O tipo de evento.
256        <titulo>: O título do evento.
257        <local>: Local em que ocorreu o evento.
258        <periodo>: Período em que o evento ocorreu.
259        <duracao>: Duração da programação do evento.
260        <verso>: Se o certificado tem a programação no verso, será impresso uma
261        nota no texto sobre o verso do certificado.
262
263        Em outras palavras, este método faz o parser do texto.
264        """
265        texto = self.getTexto()
266        try:
267            # só funciona com um par <papel></papel>
268            papel = certificado.getPapel()
269            comeco, fim = texto.split('<papel>')
270            meio, fim = fim.split('</papel>')
271            if papel == 'participante':
272                texto = comeco + fim
273            else:
274                texto = '%s%s %s %s' % (comeco, meio, papel, fim)
275        except:
276            pass
277        texto = texto.replace('<tipo>', self.getTipo())
278        texto = texto.replace('<titulo>', self.Title())
279        texto = texto.replace('<local>', self.getLocal())
280        texto = texto.replace('<periodo>', self.getPeriodo())
281        texto = texto.replace('<duracao>', self.getDuracao())
282        if self.getPrograma():
283            verso = ', em conformidade com o programa constante no verso'
284        else:
285            verso = ''
286        texto = texto.replace('<verso>', verso)
287        return texto
288
289    security.declarePrivate('_renameAfterCreation')
290    def _renameAfterCreation(self, check_auto_id=False):
291        """Renomeia o objeto com id numérico sequencial de 6 casas decimais.
292        """
293        parent_ids = self.aq_inner.aq_parent.objectIds()
294        new_id = '%0.6i' % len(parent_ids)
295        # Usando o portal_factory tem que comitar a subtransacao
296        transaction.savepoint(optimistic=True)
297        self.setId(new_id)
298
299    security.declareProtected('ILCertificados: Add Certificado', 'criaCertificadosCSV')
300    def criaCertificadosCSV(self, file_upload):
301        """Cria todos os certificados baseados no arquivo CSV carregado.
302        """
303        cont = 0
304        arquivo = csv.reader(file_upload.readlines())
305        portal = getToolByName(self, 'portal_url').getPortalObject()
306        unicodeEncode = portal.unicodeEncode
307
308        for item in arquivo:
309            ids = self.objectIds()
310            id = str(len(ids)+1)
311            try:
312                participante = item[0]
313                papel = item[1]
314                email = item[2]
315
316                self.invokeFactory('Certificado', id=id)
317                objeto = getattr(self, id)
318
319                if participante:
320                    objeto.setParticipante(unicodeEncode(participante))
321
322                if papel:
323                    objeto.setPapel(unicodeEncode(papel))
324
325                if email:
326                    objeto.setEmail(unicodeEncode(email))
327
328                objeto.reindexObject()
329                cont += 1
330            except:
331                pass
332
333        return cont
334
335
336def modify_fti(fti):
337    # Hide unnecessary tabs (usability enhancement)
338    for a in fti['actions']:
339        if a['id'] in ['metadata', 'sharing']:
340            a['visible'] = 0
341    return fti
342
343registerType(EventoCertificado, PROJECTNAME)
344# end of class EventoCertificado
345
346##code-section module-footer #fill in your manual code here
347##/code-section module-footer
348
349
350
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.