models.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from flask_sqlalchemy import SQLAlchemy
  2. db = SQLAlchemy()
  3. class CatalogoPaneles(db.Model):
  4. __tablename__ = 'catalogo_paneles'
  5. id_panel = db.Column(db.Integer, primary_key=True)
  6. marca = db.Column(db.String(50), nullable=False)
  7. modelo = db.Column(db.String(50), nullable=False)
  8. eficiencia_r = db.Column(db.Float, nullable=False)
  9. area_m2 = db.Column(db.Float, nullable=False)
  10. precio_unitario = db.Column(db.Float, nullable=False)
  11. class DatosSolaresCiudad(db.Model):
  12. __tablename__ = 'datos_solares_ciudad'
  13. id_ciudad = db.Column(db.Integer, primary_key=True)
  14. nombre_ciudad = db.Column(db.String(100), nullable=False)
  15. provincia = db.Column(db.String(100), nullable=False)
  16. irradiacion_h_promedio = db.Column(db.Float, nullable=False)
  17. class Casa(db.Model):
  18. __tablename__ = 'casas'
  19. id_casa = db.Column(db.Integer, primary_key=True)
  20. nombre = db.Column(db.String(100), nullable=False)
  21. area_techo = db.Column(db.Float, nullable=False) # Área disponible en m2
  22. id_ciudad = db.Column(db.Integer, db.ForeignKey('datos_solares_ciudad.id_ciudad'), nullable=False)
  23. ciudad = db.relationship('DatosSolaresCiudad', backref=db.backref('casas', lazy=True))
  24. class ProyectosUsuario(db.Model):
  25. __tablename__ = 'proyectos_usuario'
  26. id_proyecto = db.Column(db.Integer, primary_key=True)
  27. nombre_cliente = db.Column(db.String(100), nullable=False)
  28. # Vinculamos opcionalmente a una casa
  29. id_casa = db.Column(db.Integer, db.ForeignKey('casas.id_casa'), nullable=True)
  30. id_ciudad = db.Column(db.Integer, db.ForeignKey('datos_solares_ciudad.id_ciudad'), nullable=False)
  31. id_panel = db.Column(db.Integer, db.ForeignKey('catalogo_paneles.id_panel'), nullable=False)
  32. cantidad_paneles = db.Column(db.Integer, nullable=False)
  33. energia_estimada_mensual = db.Column(db.Float, nullable=False)
  34. ahorro_estimado = db.Column(db.Float, nullable=True)
  35. consumo_actual_kwh = db.Column(db.Float, nullable=True)
  36. costo_actual_mensual = db.Column(db.Float, nullable=True)
  37. created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
  38. fecha_referencia = db.Column(db.DateTime, nullable=False, default=db.func.current_timestamp())
  39. ciudad = db.relationship('DatosSolaresCiudad', backref=db.backref('proyectos', lazy=True))
  40. panel = db.relationship('CatalogoPaneles', backref=db.backref('proyectos', lazy=True))
  41. casa = db.relationship('Casa', backref=db.backref('proyectos', lazy=True))
  42. class Configuracion(db.Model):
  43. __tablename__ = 'configuracion'
  44. id_config = db.Column(db.Integer, primary_key=True)
  45. clave = db.Column(db.String(50), unique=True, nullable=False)
  46. valor = db.Column(db.String(100), nullable=False)