61 lines
2.9 KiB
Python
61 lines
2.9 KiB
Python
import uuid
|
|
from datetime import datetime, timezone
|
|
from app.extensions import db
|
|
|
|
class Lead(db.Model):
|
|
__tablename__ = 'leads'
|
|
|
|
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
|
nome_empresa = db.Column(db.String(255), index=True, nullable=False)
|
|
ramo_atividade = db.Column(db.String(100), index=True, nullable=False)
|
|
cep_busca = db.Column(db.String(10), index=True, nullable=False)
|
|
logradouro = db.Column(db.String(255), nullable=True)
|
|
bairro = db.Column(db.String(100), nullable=True)
|
|
cidade = db.Column(db.String(100), index=True, nullable=True)
|
|
uf = db.Column(db.String(2), nullable=True)
|
|
telefone = db.Column(db.String(50), nullable=True)
|
|
telefone_sanitizado = db.Column(db.String(30), index=True, nullable=True)
|
|
whatsapp_valido = db.Column(db.Boolean, nullable=True, default=True)
|
|
website = db.Column(db.String(255), nullable=True)
|
|
google_rating = db.Column(db.Float, default=0.0)
|
|
total_avaliacoes = db.Column(db.Integer, default=0)
|
|
google_maps_url = db.Column(db.Text, nullable=True)
|
|
status_funil = db.Column(db.String(30), default='novo', nullable=False, index=True)
|
|
tags = db.Column(db.JSON, default=list)
|
|
notas = db.Column(db.Text, nullable=True)
|
|
usuario_responsavel_id = db.Column(db.String(36), db.ForeignKey('users.id', ondelete='SET NULL'), nullable=True)
|
|
criado_em = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))
|
|
atualizado_em = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
|
|
|
|
# Relationships
|
|
interacoes = db.relationship('LeadInteracao', backref='lead', cascade='all, delete-orphan', lazy='dynamic')
|
|
|
|
def to_dict(self):
|
|
return {
|
|
'id': self.id,
|
|
'nome_empresa': self.nome_empresa,
|
|
'ramo_atividade': self.ramo_atividade,
|
|
'cep_busca': self.cep_busca,
|
|
'logradouro': self.logradouro,
|
|
'bairro': self.bairro,
|
|
'cidade': self.cidade,
|
|
'uf': self.uf,
|
|
'telefone': self.telefone,
|
|
'telefone_sanitizado': self.telefone_sanitizado,
|
|
'whatsapp_valido': self.whatsapp_valido,
|
|
'website': self.website,
|
|
'google_rating': self.google_rating,
|
|
'total_avaliacoes': self.total_avaliacoes,
|
|
'google_maps_url': self.google_maps_url,
|
|
'status_funil': self.status_funil,
|
|
'tags': self.tags or [],
|
|
'notas': self.notas or '',
|
|
'usuario_responsavel_id': self.usuario_responsavel_id,
|
|
'usuario_responsavel_nome': self.usuario_responsavel.nome if self.usuario_responsavel else None,
|
|
'criado_em': self.criado_em.isoformat() if self.criado_em else None,
|
|
'atualizado_em': self.atualizado_em.isoformat() if self.atualizado_em else None
|
|
}
|
|
|
|
def __repr__(self):
|
|
return f'<Lead {self.nome_empresa} ({self.status_funil})>'
|