models.py 2.0 KB

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