<commit_before># -*- coding: utf-8 -*-


from django.db import models
from utils.models import CNPJField
from utils.models import NARADateField
from django.utils.translation import ugettext_lazy as _
from datetime import datetime


# Create your models here.



class Contato(models.Model):

    """
    Uma instância dessa classe representa um contato.

    O método '__unicode__'	Retorna o nome.
    O método 'contato_ent'	Retorna as entidades do contato.
    A 'class Meta'		Ordena os dados pelo campo 'nome'.

    >>> ent1, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> ent2, created = Entidade.objects.get_or_create(sigla='GTECH', defaults={'nome': 'Graneiro Tech', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 321})

    >>> c, created = Contato.objects.get_or_create(nome='Joao', defaults={'email':'<EMAIL>', 'tel': '', 'ativo': True})

    >>> iden1, created = Identificacao.objects.get_or_create(entidade=ent1, contato=c, defaults={'funcao': 'Tecnico', 'area': '', 'ativo': True})

    >>> iden2, created = Identificacao.objects.get_or_create(entidade=ent2, contato=c, defaults={'funcao': 'Gerente', 'area': '', 'ativo': True})

    >>> c.__unicode__()
    'Joao'

    >>> c.contato_ent()
    u'GTECH, SAC'
    """


    primeiro_nome = models.CharField(_(u'Primeiro nome'), max_length=100, help_text=_(u'ex. <NAME>'))
    ultimo_nome = models.CharField(_(u'Último nome'), max_length=45)
    email = models.CharField(_(u'E-mail'), max_length=100, blank=True, help_text=_(u'ex. <EMAIL>'))
    ativo = models.BooleanField(_(u'Ativo'))
    tel = models.CharField(_(u'Telefone'), max_length=100, help_text=_(u'ex. Com. (11)2222-2222, Cel. (11)9999-9999, Fax (11)3333-3333, ...'))
    documento = models.CharField(max_length=30, null=True, blank=True)


    @property
    def nome(self):
	return '%s %s' % (self.primeiro_nome, self.ultimo_nome or '')

    # Retorna o nome.
    def __unicode__(self):
        return self.nome


    # Retorna as entidades do contato.
    def contato_ent(self):
        ident = self.identificacao_set.all()
        ent = []
        for i in ident:
            if i.endereco.entidade not in ent:
                ent.append(i.endereco.entidade)
        l = [e.sigla for e in ent]
        e = ', '.join(l)
        return u'%s' % (e)
    contato_ent.short_description = _(u'Entidade')


    # Define a ordenação dos dados pelo nome.
    class Meta:
        ordering = ('primeiro_nome', 'ultimo_nome')


class TipoDetalhe(models.Model):
    nome = models.CharField(max_length=40)

    def __unicode__(self):
        return self.nome

    class Meta:
        ordering = ('nome',)

class EnderecoDetalhe(models.Model):
    endereco = models.ForeignKey('identificacao.Endereco', limit_choices_to={'data_inatividade__isnull':True}, null=True, blank=True)
    tipo = models.ForeignKey('identificacao.TipoDetalhe')
    complemento = models.TextField()
    detalhe = models.ForeignKey('identificacao.EnderecoDetalhe', verbose_name=u'ou Detalhe pai', null=True, blank=True)
    ordena = models.CharField(editable=False, max_length=1000, null=True)
    mostra_bayface = models.BooleanField(_(u'Mostra no bayface'), help_text=_(u''))

    def save(self, *args, **kwargs):
        if self.endereco == None and self.detalhe == None:
            return
        if self.endereco != None and self.detalhe != None:
            return
        self.ordena = self.__unicode__()
        super(EnderecoDetalhe,self).save(*args,**kwargs)


    def __unicode__(self):
        if self.endereco:
            return u'%s - %s' % (self.endereco, self.complemento)
        else:
            return u'%s - %s' % (self.detalhe, self.complemento)

    def detalhes(self):
	if self.endereco:
	    return self.complemento
	else:
	    return u'%s - %s' % (self.detalhe.detalhes(), self.complemento)

    @property
    def end(self):
	if self.endereco: return self.endereco
        return self.detalhe.end

    class Meta:
        ordering = ('ordena', )
    #    verbose_name = u'Detalhe do endereço'
    #    verbose_name_plural = u'Detalhes dos endereços'

class Endereco(models.Model):

    """
    Uma instância dessa classe representa um endereco de uma identificação.

    O método '__unicode__'	Retorna os campos 'rua', 'num' e 'compl' (se existir).
    A 'class Meta'		Define a descrição do modelo (singular e plural), a ordenação dos dados e a unicidade que um endereço pelos 
			    	campos 'identificacao', 'rua', 'num', 'compl', 'bairro', 'cidade', 'cep', 'estado' e 'pais'.

    >>> ent, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> c, created = Contato.objects.get_or_create(nome='Joao', defaults={'email': '<EMAIL>', 'tel': '', 'ativo': True})

    >>> iden, created = Identificacao.objects.get_or_create(entidade=ent, contato=c, defaults={'funcao': 'Tecnico', 'area': '', 'ativo': True})

    >>> end, created = Endereco.objects.get_or_create(identificacao=iden, rua='Dr. Ovidio', num=215, bairro='Cerqueira Cesar', cep='05403010', estado='SP', pais='Brasil')

    >>> end.__unicode__()
    'Dr. Ovidio, 215'
    """

    entidade = models.ForeignKey('identificacao.Entidade', verbose_name=_(u'Entidade'))
    rua = models.CharField(_(u'Logradouro'), max_length=100, help_text=_(u'ex. R. Dr. Ovídio Pires de Campos'))
    num = models.IntegerField(_(u'Num.'), help_text=_(u'ex. 215'), null=True, blank=True)
    compl = models.CharField(_(u'Complemento'), max_length=100, blank=True, help_text=_(u'ex. 2. andar - Prédio da PRODESP'))
    bairro = models.CharField(_(u'Bairro'), max_length=50, blank=True, help_text=_(u'ex. Cerqueira César'))
    cidade =  models.CharField(_(u'Cidade'), max_length=50, blank=True, help_text=_(u'ex. São Paulo'))
    cep = models.CharField(_(u'CEP'), max_length=8, blank=True, help_text=_(u'ex. 05403010'))
    estado = models.CharField(_(u'Estado'), max_length=50, blank=True, help_text=_(u'ex. SP'))
    pais = models.CharField(_(u'País'), max_length=50, blank=True, help_text=_(u'ex. Brasil'))
    data_inatividade = models.DateField(_(u'Data de inatividade'), blank=True, null=True)


    # Retorna os campos rua, num e compl (se existir).
    def __unicode__(self):
        return u'%s - %s' % (self.entidade.sigla, self.logradouro())
    __unicode__.short_description = _(u'Logradouro')

    def logradouro(self):
        num = ', %s' % self.num if self.num else ''
        compl = ', %s' % self.compl if self.compl else ''
        return u'%s%s%s' % (self.rua, num, compl)


    # Define a descricao do modelo, a ordenação dos dados pela cidade e a unicidade dos dados.
    class Meta:
        verbose_name = _(u'Endereço')
        verbose_name_plural = _(u'Endereços')
        ordering = ('entidade', )
        unique_together = (('rua', 'num', 'compl', 'bairro', 'cidade', 'cep', 'estado', 'pais'),)


class ASN(models.Model):
    """
    Tabela com os ASs da Internet
    """

    numero = models.IntegerField(u'Número do AS')
    entidade = models.ForeignKey('identificacao.Entidade', null=True, blank=True)
    pais = models.CharField(u'País', null=True, blank=True, max_length=3)

    def __unicode__(self):
        if self.entidade:
            return u'%s - %s' % (self.numero, self.entidade)
        else: return self.numero

    class Meta:
        verbose_name = (u'ASN')
        verbose_name_plural = (u'ASNs')
        ordering = ('numero',)

class Entidade(models.Model):

    """
    Uma instância dessa classe representa uma entidade cadastrada no sistema.

    O método '__unicode__'	Retorna a sigla da entidade.
    O método 'sigla_nome'	Retorna a sigla e o nome da entidade.
    O método 'save'		Faz a validação do CNPJ e converte todos os caracteres da sigla para maiúsculo.
    A 'class Meta' 		Define a ordenação dos dados pela sigla.

    A unicidade dos dados é feita através do campo 'sigla'.

    >>> from utils.models import CNPJField

    >>> e, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> e.sigla_nome()
    u'SAC - Global Crossing'
    """

    entidade = models.ForeignKey('identificacao.Entidade', verbose_name=_(u'Faz parte de'), null=True, blank=True, related_name='entidade_em')
    nome = models.CharField(_(u'Nome'), max_length=255, help_text=_(u'Razão Social (ex. Telecomunicações de São Paulo S.A.)'))
    url = models.URLField(_(u'URL'), blank=True, help_text=_(u'ex. www.telefonica.com.br'))
    sigla = models.CharField(_(u'Sigla'), max_length=20, help_text=_(u'Nome Fantasia (ex. TELEFÔNICA)'), unique=True)
    #asn = models.IntegerField(_(u'ASN'), blank=True, null=True, help_text=_(u' '))
    cnpj = CNPJField(_(u'CNPJ'), blank=True, help_text=_(u'ex. 00.000.000/0000-00'))
    fisco = models.BooleanField(_(u'Fisco'), help_text=_(u'ex. Ativo no site da Receita Federal?'))


    # Retorna a sigla.
    def __unicode__(self):
        return self.sigla

    def sigla_completa(self):
        if self.entidade:
           return u'%s - %s' % (self.entidade.sigla_completa(), self.sigla)
        else:
           return u'%s' % self.sigla
    sigla_completa.short_description = _(u'Faz parte de')

    # Retorna a sigla e o nome.
    def sigla_nome(self):
        return u'%s - %s' % (self.sigla, self.nome)
    sigla_nome.short_description = _(u'Entidade')


    # Grava o CNPJ no banco de dados com as devidas pontuações e converte a sigla em letras maiúsculas.
    def save(self, force_insert=False, force_update=False):
        if self.cnpj and len(self.cnpj) < 18:
            a = list(self.cnpj)
            p = [(2,'.'), (6,'.'), (10,'/'), (15,'-')]
            for i in p:
                if i[1] != a[i[0]]:
                    a.insert(i[0],i[1])
            self.cnpj = ''.join(a)
        self.sigla = self.sigla.upper()
        super(Entidade,self).save(force_insert, force_update)


    # Define a ordenação dos dados pela sigla.
    class Meta:
        ordering = ('sigla', )
<commit_msg>Entidade.save = adicionando o parametro using, pois estava com erro na execucao de metodos get_or_create<commit_after># -*- coding: utf-8 -*-


from django.db import models
from utils.models import CNPJField
from utils.models import NARADateField
from django.utils.translation import ugettext_lazy as _
from datetime import datetime


# Create your models here.



class Contato(models.Model):

    """
    Uma instância dessa classe representa um contato.

    O método '__unicode__'	Retorna o nome.
    O método 'contato_ent'	Retorna as entidades do contato.
    A 'class Meta'		Ordena os dados pelo campo 'nome'.

    >>> ent1, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> ent2, created = Entidade.objects.get_or_create(sigla='GTECH', defaults={'nome': 'Graneiro Tech', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 321})

    >>> c, created = Contato.objects.get_or_create(nome='Joao', defaults={'email':'<EMAIL>', 'tel': '', 'ativo': True})

    >>> iden1, created = Identificacao.objects.get_or_create(entidade=ent1, contato=c, defaults={'funcao': 'Tecnico', 'area': '', 'ativo': True})

    >>> iden2, created = Identificacao.objects.get_or_create(entidade=ent2, contato=c, defaults={'funcao': 'Gerente', 'area': '', 'ativo': True})

    >>> c.__unicode__()
    'Joao'

    >>> c.contato_ent()
    u'GTECH, SAC'
    """


    primeiro_nome = models.CharField(_(u'Primeiro nome'), max_length=100, help_text=_(u'ex. <NAME>'))
    ultimo_nome = models.CharField(_(u'Último nome'), max_length=45)
    email = models.CharField(_(u'E-mail'), max_length=100, blank=True, help_text=_(u'ex. <EMAIL>'))
    ativo = models.BooleanField(_(u'Ativo'))
    tel = models.CharField(_(u'Telefone'), max_length=100, help_text=_(u'ex. Com. (11)2222-2222, Cel. (11)9999-9999, Fax (11)3333-3333, ...'))
    documento = models.CharField(max_length=30, null=True, blank=True)


    @property
    def nome(self):
	return '%s %s' % (self.primeiro_nome, self.ultimo_nome or '')

    # Retorna o nome.
    def __unicode__(self):
        return self.nome


    # Retorna as entidades do contato.
    def contato_ent(self):
        ident = self.identificacao_set.all()
        ent = []
        for i in ident:
            if i.endereco.entidade not in ent:
                ent.append(i.endereco.entidade)
        l = [e.sigla for e in ent]
        e = ', '.join(l)
        return u'%s' % (e)
    contato_ent.short_description = _(u'Entidade')


    # Define a ordenação dos dados pelo nome.
    class Meta:
        ordering = ('primeiro_nome', 'ultimo_nome')


class TipoDetalhe(models.Model):
    nome = models.CharField(max_length=40)

    def __unicode__(self):
        return self.nome

    class Meta:
        ordering = ('nome',)

class EnderecoDetalhe(models.Model):
    endereco = models.ForeignKey('identificacao.Endereco', limit_choices_to={'data_inatividade__isnull':True}, null=True, blank=True)
    tipo = models.ForeignKey('identificacao.TipoDetalhe')
    complemento = models.TextField()
    detalhe = models.ForeignKey('identificacao.EnderecoDetalhe', verbose_name=u'ou Detalhe pai', null=True, blank=True)
    ordena = models.CharField(editable=False, max_length=1000, null=True)
    mostra_bayface = models.BooleanField(_(u'Mostra no bayface'), help_text=_(u''))

    def save(self, *args, **kwargs):
        if self.endereco == None and self.detalhe == None:
            return
        if self.endereco != None and self.detalhe != None:
            return
        self.ordena = self.__unicode__()
        super(EnderecoDetalhe,self).save(*args,**kwargs)


    def __unicode__(self):
        if self.endereco:
            return u'%s - %s' % (self.endereco, self.complemento)
        else:
            return u'%s - %s' % (self.detalhe, self.complemento)

    def detalhes(self):
	if self.endereco:
	    return self.complemento
	else:
	    return u'%s - %s' % (self.detalhe.detalhes(), self.complemento)

    @property
    def end(self):
	if self.endereco: return self.endereco
        return self.detalhe.end

    class Meta:
        ordering = ('ordena', )
    #    verbose_name = u'Detalhe do endereço'
    #    verbose_name_plural = u'Detalhes dos endereços'

class Endereco(models.Model):

    """
    Uma instância dessa classe representa um endereco de uma identificação.

    O método '__unicode__'	Retorna os campos 'rua', 'num' e 'compl' (se existir).
    A 'class Meta'		Define a descrição do modelo (singular e plural), a ordenação dos dados e a unicidade que um endereço pelos 
			    	campos 'identificacao', 'rua', 'num', 'compl', 'bairro', 'cidade', 'cep', 'estado' e 'pais'.

    >>> ent, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> c, created = Contato.objects.get_or_create(nome='Joao', defaults={'email': '<EMAIL>', 'tel': '', 'ativo': True})

    >>> iden, created = Identificacao.objects.get_or_create(entidade=ent, contato=c, defaults={'funcao': 'Tecnico', 'area': '', 'ativo': True})

    >>> end, created = Endereco.objects.get_or_create(identificacao=iden, rua='Dr. Ovidio', num=215, bairro='Cerqueira Cesar', cep='05403010', estado='SP', pais='Brasil')

    >>> end.__unicode__()
    'Dr. Ovidio, 215'
    """

    entidade = models.ForeignKey('identificacao.Entidade', verbose_name=_(u'Entidade'))
    rua = models.CharField(_(u'Logradouro'), max_length=100, help_text=_(u'ex. R. Dr. Ovídio Pires de Campos'))
    num = models.IntegerField(_(u'Num.'), help_text=_(u'ex. 215'), null=True, blank=True)
    compl = models.CharField(_(u'Complemento'), max_length=100, blank=True, help_text=_(u'ex. 2. andar - Prédio da PRODESP'))
    bairro = models.CharField(_(u'Bairro'), max_length=50, blank=True, help_text=_(u'ex. Cerqueira César'))
    cidade =  models.CharField(_(u'Cidade'), max_length=50, blank=True, help_text=_(u'ex. São Paulo'))
    cep = models.CharField(_(u'CEP'), max_length=8, blank=True, help_text=_(u'ex. 05403010'))
    estado = models.CharField(_(u'Estado'), max_length=50, blank=True, help_text=_(u'ex. SP'))
    pais = models.CharField(_(u'País'), max_length=50, blank=True, help_text=_(u'ex. Brasil'))
    data_inatividade = models.DateField(_(u'Data de inatividade'), blank=True, null=True)


    # Retorna os campos rua, num e compl (se existir).
    def __unicode__(self):
        return u'%s - %s' % (self.entidade.sigla, self.logradouro())
    __unicode__.short_description = _(u'Logradouro')

    def logradouro(self):
        num = ', %s' % self.num if self.num else ''
        compl = ', %s' % self.compl if self.compl else ''
        return u'%s%s%s' % (self.rua, num, compl)


    # Define a descricao do modelo, a ordenação dos dados pela cidade e a unicidade dos dados.
    class Meta:
        verbose_name = _(u'Endereço')
        verbose_name_plural = _(u'Endereços')
        ordering = ('entidade', )
        unique_together = (('rua', 'num', 'compl', 'bairro', 'cidade', 'cep', 'estado', 'pais'),)


class ASN(models.Model):
    """
    Tabela com os ASs da Internet
    """

    numero = models.IntegerField(u'Número do AS')
    entidade = models.ForeignKey('identificacao.Entidade', null=True, blank=True)
    pais = models.CharField(u'País', null=True, blank=True, max_length=3)

    def __unicode__(self):
        if self.entidade:
            return u'%s - %s' % (self.numero, self.entidade)
        else: return self.numero

    class Meta:
        verbose_name = (u'ASN')
        verbose_name_plural = (u'ASNs')
        ordering = ('numero',)

class Entidade(models.Model):

    """
    Uma instância dessa classe representa uma entidade cadastrada no sistema.

    O método '__unicode__'	Retorna a sigla da entidade.
    O método 'sigla_nome'	Retorna a sigla e o nome da entidade.
    O método 'save'		Faz a validação do CNPJ e converte todos os caracteres da sigla para maiúsculo.
    A 'class Meta' 		Define a ordenação dos dados pela sigla.

    A unicidade dos dados é feita através do campo 'sigla'.

    >>> from utils.models import CNPJField

    >>> e, created = Entidade.objects.get_or_create(sigla='SAC', defaults={'nome': 'Global Crossing', 'cnpj': '00.000.000/0000-00', 'ativo': False, 'fisco': True, 'url': '', 'asn': 123})

    >>> e.sigla_nome()
    u'SAC - Global Crossing'
    """

    entidade = models.ForeignKey('identificacao.Entidade', verbose_name=_(u'Faz parte de'), null=True, blank=True, related_name='entidade_em')
    nome = models.CharField(_(u'Nome'), max_length=255, help_text=_(u'Razão Social (ex. Telecomunicações de São Paulo S.A.)'))
    url = models.URLField(_(u'URL'), blank=True, help_text=_(u'ex. www.telefonica.com.br'))
    sigla = models.CharField(_(u'Sigla'), max_length=20, help_text=_(u'Nome Fantasia (ex. TELEFÔNICA)'), unique=True)
    #asn = models.IntegerField(_(u'ASN'), blank=True, null=True, help_text=_(u' '))
    cnpj = CNPJField(_(u'CNPJ'), blank=True, help_text=_(u'ex. 00.000.000/0000-00'))
    fisco = models.BooleanField(_(u'Fisco'), help_text=_(u'ex. Ativo no site da Receita Federal?'))


    # Retorna a sigla.
    def __unicode__(self):
        return self.sigla

    def sigla_completa(self):
        if self.entidade:
           return u'%s - %s' % (self.entidade.sigla_completa(), self.sigla)
        else:
           return u'%s' % self.sigla
    sigla_completa.short_description = _(u'Faz parte de')

    # Retorna a sigla e o nome.
    def sigla_nome(self):
        return u'%s - %s' % (self.sigla, self.nome)
    sigla_nome.short_description = _(u'Entidade')


    # Grava o CNPJ no banco de dados com as devidas pontuações e converte a sigla em letras maiúsculas.
    def save(self, force_insert=False, force_update=False, using=None):
        if self.cnpj and len(self.cnpj) < 18:
            a = list(self.cnpj)
            p = [(2,'.'), (6,'.'), (10,'/'), (15,'-')]
            for i in p:
                if i[1] != a[i[0]]:
                    a.insert(i[0],i[1])
            self.cnpj = ''.join(a)
        self.sigla = self.sigla.upper()
        super(Entidade,self).save(force_insert, force_update)


    # Define a ordenação dos dados pela sigla.
    class Meta:
        ordering = ('sigla', )

{'fraction_non_alphanumeric': 0.15439499102072513, 'fraction_numerical': 0.019123428626898996, 'mean_word_length': 3.4626380766731644, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 101, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1323088', 'n_tokens_mistral': 7846, 'n_tokens_neox': 7424, 'n_words': 1700}