class PessoaShowForm(base.ShowForm): """Formulário de visualização de uma pessoa. """ grok.context(INavigationRoot) grok.name('show-pessoa') grok.require('zope2.View') schema = IPessoa klass = Pessoa label = _(u'Detalhes da Pessoa') description = _(u'Formulário de visualização de uma pessoa.')
class UFShowForm(base.ShowForm): """Formulário de visualização de uma UF. """ grok.context(INavigationRoot) grok.name('show-uf') grok.require('cmf.ManagePortal') schema = IUF klass = UF label = _(u'Detalhes da UF') description = _(u'Formulário de visualização de uma UF.')
class UFEditForm(base.EditForm): """Formulário de edição de uma UF. """ grok.context(INavigationRoot) grok.name('edit-uf') grok.require('cmf.ManagePortal') schema = IUF klass = UF label = _(u'Editar UF') descrition = _(u'Formulário de edição de uma UF.')
class AddForm(form.SchemaForm): """Formulário base de cadastro. """ grok.context(INavigationRoot) ignoreContext = True def createAndAdd(self, data): raise NotImplementedError def nextURL(self): go('list-' + vs(self.klass)) def cancelURL(self): self.nextURL() @button.buttonAndHandler(_(u'Cadastrar'), name='cadastrar') def handleCadastrar(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return status = IStatusMessage(self.request) try: obj = self.createAndAdd(data) session = Session() session.flush() except IntegrityError, e: msg = _(u'Falha de integridade relacional: ' + str(e)) status.add(msg, 'error') raise else:
def removeItem(self): content = self.getContent() status = IStatusMessage(self.request) try: session = Session() session.delete(content) session.flush() except AssertionError, e: msg = _(u'Falha de integridade relacional: ' + str(e)) status.add(msg, 'error') raise
class UFAddForm(base.AddForm): """Formulário de cadastro de uma UF. """ grok.context(INavigationRoot) grok.name('add-uf') grok.require('cmf.ManagePortal') schema = IUF klass = UF label = _(u'Adicionar UF') description = _(u'Formulário de cadastro de uma UF.') def createAndAdd(self, data): uf = UF() uf.sigla = data['sigla'] uf.nome = data['nome'] session = Session() session.add(uf) session.flush()
def handleSalvar(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return status = IStatusMessage(self.request) try: self.applyChanges(data) session = Session() session.flush() except IntegrityError, e: msg = _(u'Falha de integridade relacional: ' + str(e)) status.add(msg, 'error') raise
class PessoaAddForm(base.AddForm): """Formulário de cadastro de uma pessoa. """ grok.context(INavigationRoot) grok.name('add-pessoa') grok.require('zope2.View') schema = IPessoa klass = Pessoa label = _(u'Adicionar Pessoa') description = _(u'Formulário de cadastro de uma pessoa.') def createAndAdd(self, data): del data['id'] # garante que alguns campos são armazenados apenas como # números, mesmo sendo strings for campo in ('cep', 'cpf_cnpj'): if data[campo] is not None: data[campo] = ''.join([c for c in data[campo] if c.isdigit()]) pessoa = Pessoa() pessoa.nome = data['nome'] pessoa.email = data['email'] pessoa.endereco = data['endereco'] pessoa.bairro = data['bairro'] pessoa.cep = data['cep'] pessoa.cidade = data['cidade'] pessoa.uf_id = data['uf_id'] pessoa.telefone = data['telefone'] pessoa.cpf_cnpj = data['cpf_cnpj'] pessoa.tipopessoa = data['tipopessoa'] session = Session() session.add(pessoa) session.flush()
class PessoaEditForm(base.EditForm): """Formulário de edição de uma pessoa. """ grok.context(INavigationRoot) grok.name('edit-pessoa') grok.require('zope2.View') schema = IPessoa klass = Pessoa label = _(u'Editar Pessoa') descrition = _(u'Formulário de edição de uma pessoa.') def applyChanges(self, data): content = self.getContent() if content: for k, v in data.items(): # garante que alguns campos são armazenados apenas # como números, mesmo sendo strings if k in ('cep', 'cpf_cnpj') and v is not None: v = ''.join([c for c in v if c.isdigit()]) setattr(content, k, v)
class IUF(form.Schema): form.mode(id='hidden') id = schema.Int(title=_(u'ID'), description=_(u'Identificador da UF.'), required=False) sigla = schema.TextLine(title=_(u'Sigla'), description=_(u'Informe a sigla da UF.')) nome = schema.TextLine(title=_(u'Nome'), description=_(u'Informe o nome da UF.'))
class EditForm(form.SchemaForm): """Formulário base de edição dos formmulários. """ grok.context(INavigationRoot) def getContent(self): session = Session() return session.query(self.klass).get(self.rec_id()) def applyChanges(self, data): content = self.getContent() if content: for k, v in data.items(): setattr(content, k, v) def nextURL(self): go('show-' + vs(self.klass), id=self.rec_id()) def rec_id(self): return self.request.get('id', self.request.get('form.widgets.id', None)) @button.buttonAndHandler(_(u'Salvar'), name='salvar') def handleSalvar(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return status = IStatusMessage(self.request) try: self.applyChanges(data) session = Session() session.flush() except IntegrityError, e: msg = _(u'Falha de integridade relacional: ' + str(e)) status.add(msg, 'error') raise else:
def validateCPFCNPJ(value): if value and not valida_cpf_cnpj(value): raise interface.Invalid(_(u'CPF/CNPJ inválido.'))
def validateEmail(value): if value and re.compile(EMAIL_RE).match(value) is None: raise interface.Invalid(_(u'E-mail inválido.'))
def handleCadastrar(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return status = IStatusMessage(self.request) try: obj = self.createAndAdd(data) session = Session() session.flush() except IntegrityError, e: msg = _(u'Falha de integridade relacional: ' + str(e)) status.add(msg, 'error') raise else: status.add(_(u'Cadastro efetuado com sucesso.'), 'info') self.nextURL() @button.buttonAndHandler(_(u'Cancelar'), name='cancelar') def handleCancelar(self, action): self.cancelURL() def updateActions(self): self.request.set('disable_border', True) super(AddForm, self).updateActions() self.actions["cadastrar"].addClass("context") self.actions["cancelar"].addClass("standalone") class EditForm(form.SchemaForm): """Formulário base de edição dos formmulários.
def TipoPessoaVocabulary(context): return SimpleVocabulary([ SimpleTerm('F','F', _(u'Física')), SimpleTerm('O','O', _(u'Organização')), ])
class IPessoa(form.Schema): """ Interface que descreve representações de Pessoa. """ form.fieldset('endereco', label=u"Endereço", fields=['endereco', 'bairro', 'cep', 'cidade', 'uf_id']) form.mode(id='hidden') id = schema.Int(title=_(u'ID'), description=_(u'Identificador da Pessoa.'), required=False) nome = schema.TextLine(title=_(u'Nome'), description=_(u'Nome completo da Pessoa.'), max_length=100) email = schema.TextLine(title=_(u'Email'), description=_(u'Informe o email da Pessoa.'), max_length=254) endereco = schema.TextLine( title=_(u'Endereço'), description=_(u'Logradouro, número e complemento.'), max_length=100, required=False) bairro = schema.TextLine(title=_(u'Bairro'), description=_(u'Informe o bairro.'), max_length=50, required=False) cep = schema.TextLine(title=_(u'CEP'), description=_(u'Informe o CEP (apenas números)'), required=False) cidade = schema.TextLine(title=_(u'Cidade'), description=_(u'Informe a cidade.'), max_length=50, required=False) uf_id = schema.Choice(title=_(u'UF'), description=_(u'Selecione o estado da federação.'), required=False, vocabulary='xiru.alchemyform.uf-vocab') tipopessoa = schema.Choice( title=_(u'Tipo'), description=_(u'Informe se a pessoa é física ou uma organização.'), default=u'F', vocabulary='xiru.alchemyform.tipopessoa-vocab') cpf_cnpj = schema.TextLine( title=_(u'CPF/CNPJ'), description= _(u'Informe o CPF ou CNPJ de acordo com o tipo de pessoa: física ou organização.' ), max_length=20, required=False) telefone = schema.TextLine(title=_(u'Telefone'), description=_(u'Informe o telefone com DDD.'), max_length=30, required=False)
def validateCep(value): if value: value = ''.join([c for c in value if c.isdigit()]) if len(value) != 8: raise interface.Invalid(_(u'CEP inválido.'))