models.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from datetime import datetime, timezone
  2. from sqlalchemy import (
  3. Column,
  4. Date,
  5. DateTime,
  6. ForeignKey,
  7. Integer,
  8. Numeric,
  9. String,
  10. Text,
  11. )
  12. from sqlalchemy.orm import relationship
  13. from sqlalchemy.orm.relationships import _RelationshipDeclared
  14. from .db import Base
  15. class Kunde(Base):
  16. __tablename__ = "kunden"
  17. id = Column(Integer, primary_key=True, index=True)
  18. name = Column(String, nullable=False)
  19. historie = Column(Text, default="")
  20. forderungen = relationship("Forderung", back_populates="kunde")
  21. class Forderung(Base):
  22. __tablename__ = "forderungen"
  23. id = Column(Integer, primary_key=True, index=True)
  24. kunde_id = Column(Integer, ForeignKey("kunden.id"))
  25. verkaeufer_id = Column(Integer, index=True)
  26. fahrzeug = Column(String, nullable=True)
  27. fahrgestellnummer = Column(String, nullable=True)
  28. rechnungsnummer: Column[str] = Column(String, nullable=False)
  29. betrag = Column(Numeric(12, 2), nullable=False)
  30. faelligkeit = Column(Date, nullable=True)
  31. status = Column(String, default="offen")
  32. kunde = relationship("Kunde", back_populates="forderungen")
  33. zahlungen = relationship("Zahlung", back_populates="forderung")
  34. bemerkungen = relationship("Bemerkung", back_populates="forderung")
  35. class Zahlung(Base):
  36. __tablename__ = "zahlungen"
  37. id = Column(Integer, primary_key=True, index=True)
  38. forderung_id = Column(Integer, ForeignKey("forderungen.id"))
  39. betrag = Column(Numeric(12, 2), nullable=False)
  40. datum = Column(Date, nullable=False)
  41. forderung = relationship("Forderung", back_populates="zahlungen")
  42. class Bemerkung(Base):
  43. __tablename__ = "bemerkungen"
  44. id = Column(Integer, primary_key=True, index=True)
  45. forderung_id = Column(Integer, ForeignKey("forderungen.id"))
  46. benutzer = Column(String, nullable=False)
  47. bemerkung = Column(Text, nullable=True)
  48. wiedervorlage_datum = Column(Date, nullable=True)
  49. zeitstempel = Column(DateTime, default=datetime.now(timezone.utc))
  50. forderung = relationship("Forderung", back_populates="bemerkungen")