[plonegov-br] RES: Dúvida Correios.

Fernando Bezerra fbezerra em gmail.com
Segunda Abril 18 18:14:10 BRT 2016


Tarsísio,

Você pode utizar os métodos[1] pre_validate e/ ou post_validate
Existe uma outra lista[2], mais técnica, que também pode ajudar.

[1]https://plone.org/products/archetypes/documentation/old/ArchetypesDeveloperGuide/index_html#pre-post-validation-hooks
[2]https://br.groups.yahoo.com/group/zope-pt


Em 18 de abril de 2016 17:09, Tarcísio Ribeiro Freire Junior <
tarcisiofreire em correios.com.br> escreveu:

> Nada feito.
>
> Coloquei o import e implementei deste jeito:
>
>
>
> def configuraDestaque(destaque,event):
>
>     """configuracoes do Destaque"""
>
>
>
>     import pdb; pdb.set_trace();
>
>
>
>     catalog = getToolByName(destaque,'portal_catalog')
>
>     # cria pasta com mesmo id e titulo do destaque para conter todo seu
> conteudo
>
>     id = destaque.id
>
>     titulo = destaque.Title()
>
>     pastaPai = aq_parent(aq_inner(destaque))
>
>     objetoPreExistente = destaqueExistente(destaque)
>
>
>
>     if not objetoPreExistente:
>
>         pastaPai.manage_renameObject(id, id + '-pagina')
>
>         destaque.setTitle(titulo + SUFIXO_DESTAQUE)
>
>         pastaPai.invokeFactory("Folder",id,title=titulo)
>
>         pastaDestaque = pastaPai[id]
>
>         #habilita restricoes de tipos
>
>         addable_types = ["Destaque","Image"]
>
>         pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)
>
>         pastaDestaque.setLocallyAllowedTypes(addable_types)
>
>         pastaDestaque.setImmediatelyAddableTypes(addable_types)
>
>         # Will finish Archetypes content item creation process,
>
>         # rename-after-creation and such
>
>         pastaDestaque.unmarkCreationFlag()
>
>
>
>         objetosDoDestaque = catalog(path = { "query" :
> "/".join(pastaPai.getPhysicalPath()), "depth" : 1},
>
>                                 portal_type = addable_types)
>
>
>
>         for objeto in objetosDoDestaque:
>
>             pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(
> objeto.id))
>
>             if objeto.portal_type == 'Destaque':
>
>                 pastaDestaque.default_page = objeto.id
>
>     else:
>
>         *api.portal.show_message(message='Blueberries!',
> request=event.object.REQUEST)*
>
>         pastaPai.manage_delObjects([id])
>
>
>
> def destaqueExistente(destaque):
>
>     """Verifica se já há desataques na pasta pai. Se houver lança execeção
> e aborta a criação."""
>
>     pastaPai = aq_parent(aq_inner(destaque))
>
>     itens = pastaPai.items()
>
>     # import pdb; pdb.set_trace();
>
>     for item in itens:
>
>         # item é uma lista filha da lista itens: (título do objeto ,
> objeto)
>
>         if IDestaque.providedBy(item[1]) and item[0] != destaque.Title():
>
>
>
>             logger.warn(destaque)
>
>             logger.warn(pastaPai)
>
>             logger.warn(item[1])
>
>
>
>             item[1].plone_utils.addPortalMessage(_(u'Não é possível
> cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta
> /Destaques e adicione o item pretendido.'), 'error')
>
>             return item[1]
>
>
>
>
>
>
>
> *Tarcísio Ribeiro Freire Junior*
> Analista de Correios / ANALISTA IX
>
>
>
> AC/VICOR/DECOR/GSSU
> tarcisiofreire em correios.com.br
> (61) 3207-1775
>
>
>
> *De:* plonegov-br-bounces em listas.interlegis.gov.br [mailto:
> plonegov-br-bounces em listas.interlegis.gov.br] *Em nome de *Idg Serpro
> *Enviada em:* segunda-feira, 18 de abril de 2016 16:53
> *Para:* plonegov-br em listas.interlegis.gov.br
> *Assunto:* Re: [plonegov-br] Dúvida Correios.
>
>
>
> Você pode tentar utilizar o plone.api:
>
>
>
>
> http://docs.plone.org/develop/plone.api/docs/portal.html#show-notification-message
>
> --
> Wesley Barroso Lopes
> Analista de Desenvolvimento
> SERPRO/SUPDE/DEDES/DECVF
> Tel: 31 3311 6838
>
>
>
> Em 18/04/2016 16:26:50, Tarcísio Ribeiro Freire Junior escreveu:
>
> Pessoal, boa tarde!
>
>
>
> Tenho um tipo de conteúdo chamado destaque que, devido a necessidade do
> requisito, só deve ter um por pasta. Deste modo, o código completo mais
> abaixo, além de criar elementos necessários ao funcionamento da instância
> do tipo, controla uma adição secundária deste. E, ao término do processo,
> tenta apresentar uma mensagem para o usuário, ponto que estou enfrentando o
> problema.
>
>
>
> Já olhei a documentação
> http://docs.plone.org/develop/plone/sessions/statusmessages.html, mas não
> foi muito esclarecedora quanto ao erro que estou inserindo no código.
>
>
>
> Estou com um dúvida nesta linha, creio:
>
> item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de
> um destaque em uma pasta. Por favor, volte até a pasta /Destaques e
> adicione o item pretendido.'), 'error')
>
>
>
> **O que está sendo curioso em todo esse processo de tentativa e erro é que
> já consegui apresentar a mensagem quando estava dando um erro de permissão
> de adição de itens. Creio que meu código esteja se perdendo com o contexto.
>
>
>
> ***Desculpem pela qualidade do código, pois já fiz tantas tentativas que
> acabei bagunçado por demais. Pretendo organizá-lo ao final, após descobrir
> o que está ocorrendo.
>
>
>
>
>
> Antecipadamente, agradeço o apoio.
>
> Obrigado!
>
>
>
> ####################################
> Código completo
>
> ####################################
>
>
>
>
>
> # -*- coding: utf-8 -*-
>
> """Definition of the Destaque content type
>
> """
>
> from Acquisition import aq_inner, aq_parent
>
> from zope.interface import implements
>
> from zope.component import getUtility
>
> HAS_LINGUAPLONE = True
>
> try:
>
>     from Products.LinguaPlone.I18NBaseBTreeFolder import
> I18NOnlyBaseBTreeFolder
>
>     from Products.LinguaPlone import public as atapi
>
> except ImportError:
>
>     HAS_LINGUAPLONE = False
>
>     from Products.Archetypes import atapi
>
>
>
> from plone.app.folder.folder import ATFolder
>
> from plone.i18n.normalizer.interfaces import IIDNormalizer
>
>
>
> from Products.CMFCore.utils import getToolByName
>
> from Products.ATContentTypes.content.document import ATDocument,
> ATDocumentSchema
>
> from Products.ATContentTypes.content import schemata
>
> from Products.ATContentTypes.configuration import zconf
>
> from Products.ATContentTypes.lib import constraintypes
>
>
>
> # -*- Message Factory Imported Here -*-
>
> from pci.conteudo import conteudoMessageFactory as _
>
> from pci.conteudo.interfaces import IDestaque
>
> from pci.conteudo.config import PROJECTNAME, SUFIXO_DESTAQUE
>
> import logging
>
> from pci.policy import config
>
> logger = logging.getLogger(config.PROJECTNAME)
>
>
>
> def configuraDestaque(destaque,event):
>
>     """configuracoes do Destaque"""
>
>
>
>     import pdb; pdb.set_trace();
>
>
>
>     catalog = getToolByName(destaque,'portal_catalog')
>
>     # cria pasta com mesmo id e titulo do destaque para conter todo seu
> conteudo
>
>     id = destaque.id
>
>     titulo = destaque.Title()
>
>     pastaPai = aq_parent(aq_inner(destaque))
>
>     objetoPreExistente = destaqueExistente(destaque)
>
>
>
>     if not objetoPreExistente:
>
>         pastaPai.manage_renameObject(id, id + '-pagina')
>
>         destaque.setTitle(titulo + SUFIXO_DESTAQUE)
>
>         pastaPai.invokeFactory("Folder",id,title=titulo)
>
>         pastaDestaque = pastaPai[id]
>
>         #habilita restricoes de tipos
>
>         addable_types = ["Destaque","Image"]
>
>         pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)
>
>         pastaDestaque.setLocallyAllowedTypes(addable_types)
>
>         pastaDestaque.setImmediatelyAddableTypes(addable_types)
>
>         # Will finish Archetypes content item creation process,
>
>         # rename-after-creation and such
>
>         pastaDestaque.unmarkCreationFlag()
>
>
>
>         objetosDoDestaque = catalog(path = { "query" :
> "/".join(pastaPai.getPhysicalPath()), "depth" : 1},
>
>                                 portal_type = addable_types)
>
>
>
>         for objeto in objetosDoDestaque:
>
>             pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(
> objeto.id))
>
>             if objeto.portal_type == 'Destaque':
>
>                 pastaDestaque.default_page = objeto.id
>
>     else:
>
>         pastaPai.manage_delObjects([id])
>
>
>
> def destaqueExistente(destaque):
>
>     """Verifica se já há desataques na pasta pai. Se houver lança execeção
> e aborta a criação."""
>
>     pastaPai = aq_parent(aq_inner(destaque))
>
>     itens = pastaPai.items()
>
>     # import pdb; pdb.set_trace();
>
>     for item in itens:
>
>         # item é uma lista filha da lista itens: (título do objeto ,
> objeto)
>
>         if IDestaque.providedBy(item[1]) and item[0] != destaque.Title():
>
>
>
>             logger.warn(destaque)
>
>             logger.warn(pastaPai)
>
>             logger.warn(item[1])
>
>
>
>             item[1].plone_utils.addPortalMessage(_(u'Não é possível
> cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta
> /Destaques e adicione o item pretendido.'), 'error')
>
>             return item[1]
>
>
>
>
>
>
>
> DestaqueSchema = ATDocumentSchema.copy() + atapi.Schema((
>
>
>
>     # -*- Your Archetypes field definitions here ... -*-
>
>
>
> ))
>
>
>
> # Set storage on fields copied from ATFolderSchema, making sure
>
> # they work well with the python bridge properties.
>
>
>
> DestaqueSchema['title'].storage = atapi.AnnotationStorage()
>
> DestaqueSchema['description'].storage = atapi.AnnotationStorage()
>
>
>
> schemata.finalizeATCTSchema(
>
>     DestaqueSchema,
>
>     folderish=False,
>
>     moveDiscussion=False
>
> )
>
>
>
> class Destaque(ATDocument):
>
>     """Unidade Destaque dos Correios"""
>
>
>
>     implements(IDestaque)
>
>     meta_type = "Destaque"
>
>     schema = DestaqueSchema
>
>
>
>     _at_rename_after_creation = True
>
>
>
>
>
>     title = atapi.ATFieldProperty('title')
>
>     description = atapi.ATFieldProperty('description')
>
>     # -*- Your ATSchema to Python Property Bridges Here ... -*-
>
>
>
> atapi.registerType(Destaque, PROJECTNAME)
>
>
>
>
>
> *Tarcísio Ribeiro Freire Junior*
> Analista de Correios / ANALISTA IX
>
>
>
> AC/VICOR/DECOR/GSSU
> tarcisiofreire em correios.com.br
> (61) 3207-1775
>
>
>
>
> ------------------------------
>
>
> AVISO LEGAL
>
> “Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é
> dirigida, podendo conter informação confidencial e/ou legalmente
> privilegiada. Se você não for destinatário desta mensagem, desde já fica
> notificado de abster-se a divulgar, copiar, distribuir, examinar ou, de
> qualquer forma, utilizar a informação contida nesta mensagem, por ser
> ilegal. Caso você tenha recebido esta mensagem por engano, peço que me
> retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo
> em sua base de dados, registros ou sistema de controle. Fica desprovida de
> eficácia e validade a mensagem que contiver opiniões particulares e
> vínculos obrigacionais, expedida por quem não detenha poderes de
> representação por parte da ECT.”
>
> "This message is intended only for the person to whom it is addressed and
> may contain confidential and/or legally privileged. If you are not a
> recipient of this message, it is now notified of refraining to disclose;
> copy; distribute; examine; or in any way use the information contained in
> this message because it is illegal. If you have received this message in
> error, please I ask to return this email, promoting as soon as possible the
> elimination of its content in database, records or system control. It is
> devoid of effective and valid message that contains the private opinions
> and dividend bonds, issued by those not holding powers of attorney by the
> ECT."
>
> --
>
> Comunidade Plone no Governo
>
> Site: http://www.softwarelivre.gov.br/plone
>
> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>
> Histórico: http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>
> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>
>
>
> -
>
>
> "Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO),
> empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é
> enviada exclusivamente a seu destinatário e pode conter informações
> confidenciais, protegidas por sigilo profissional. Sua utilização
> desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a
> recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente,
> esclarecendo o equívoco."
>
> "This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a
> government company established under Brazilian law (5.615/70) -- is
> directed exclusively to its addressee and may contain confidential data,
> protected under professional secrecy rules. Its unauthorized use is illegal
> and may subject the transgressor to the law's penalties. If you're not the
> addressee, please send it back, elucidating the failure."
>
> ------------------------------
>
> AVISO LEGAL
>
> “Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é
> dirigida, podendo conter informação confidencial e/ou legalmente
> privilegiada. Se você não for destinatário desta mensagem, desde já fica
> notificado de abster-se a divulgar, copiar, distribuir, examinar ou, de
> qualquer forma, utilizar a informação contida nesta mensagem, por ser
> ilegal. Caso você tenha recebido esta mensagem por engano, peço que me
> retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo
> em sua base de dados, registros ou sistema de controle. Fica desprovida de
> eficácia e validade a mensagem que contiver opiniões particulares e
> vínculos obrigacionais, expedida por quem não detenha poderes de
> representação por parte da ECT.”
>
> "This message is intended only for the person to whom it is addressed and
> may contain confidential and/or legally privileged. If you are not a
> recipient of this message, it is now notified of refraining to disclose;
> copy; distribute; examine; or in any way use the information contained in
> this message because it is illegal. If you have received this message in
> error, please I ask to return this email, promoting as soon as possible the
> elimination of its content in database, records or system control. It is
> devoid of effective and valid message that contains the private opinions
> and dividend bonds, issued by those not holding powers of attorney by the
> ECT."
>
> --
> Comunidade Plone no Governo
> Site: http://www.softwarelivre.gov.br/plone
> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
> Histórico:
> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160418/2c257b26/attachment.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.jpg
Tipo: image/jpeg
Tamanho: 13693 bytes
Descrição: não disponível
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160418/2c257b26/attachment.jpg>


Mais detalhes sobre a lista de discussão PloneGov-BR