models.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. orientacion = db.Column(db.String(20), nullable=False, default='Norte')
  23. inclinacion = db.Column(db.Float, nullable=False, default=0.0)
  24. id_ciudad = db.Column(db.Integer, db.ForeignKey('datos_solares_ciudad.id_ciudad'), nullable=False)
  25. ciudad = db.relationship('DatosSolaresCiudad', backref=db.backref('casas', lazy=True))
  26. class ProyectosUsuario(db.Model):
  27. __tablename__ = 'proyectos_usuario'
  28. id_proyecto = db.Column(db.Integer, primary_key=True)
  29. nombre_cliente = db.Column(db.String(100), nullable=False)
  30. # Vinculamos opcionalmente a una casa
  31. id_casa = db.Column(db.Integer, db.ForeignKey('casas.id_casa'), nullable=True)
  32. id_ciudad = db.Column(db.Integer, db.ForeignKey('datos_solares_ciudad.id_ciudad'), nullable=False)
  33. id_panel = db.Column(db.Integer, db.ForeignKey('catalogo_paneles.id_panel'), nullable=False)
  34. cantidad_paneles = db.Column(db.Integer, nullable=False)
  35. energia_estimada_mensual = db.Column(db.Float, nullable=False)
  36. ahorro_estimado = db.Column(db.Float, nullable=True)
  37. consumo_actual_kwh = db.Column(db.Float, nullable=True)
  38. costo_actual_mensual = db.Column(db.Float, nullable=True)
  39. created_at = db.Column(db.DateTime, default=db.func.current_timestamp())
  40. fecha_referencia = db.Column(db.DateTime, nullable=False, default=db.func.current_timestamp())
  41. ciudad = db.relationship('DatosSolaresCiudad', backref=db.backref('proyectos', lazy=True))
  42. panel = db.relationship('CatalogoPaneles', backref=db.backref('proyectos', lazy=True))
  43. casa = db.relationship('Casa', backref=db.backref('proyectos', lazy=True))
  44. class Configuracion(db.Model):
  45. __tablename__ = 'configuracion'
  46. id_config = db.Column(db.Integer, primary_key=True)
  47. clave = db.Column(db.String(50), unique=True, nullable=False)
  48. valor = db.Column(db.String(100), nullable=False)