feat: Compact 1-page print view, event lifecycle & conflict warnings, bulk email invites, guest pass link and post-event guest cleanup

This commit is contained in:
2026-09-21 13:29:15 +02:00
parent e5ca9c3cbf
commit 913aa646ea
5 changed files with 741 additions and 263 deletions
+9 -2
View File
@@ -35,7 +35,7 @@ class User(Base):
created_at = Column(DateTime, default=func.now())
tenant = relationship("Tenant", back_populates="users")
orders = relationship("Order", back_populates="user", cascade="all, delete-orphan")
orders = relationship("Order", back_populates="user")
class Invitation(Base):
@@ -93,7 +93,8 @@ class Order(Base):
id = Column(Integer, primary_key=True, index=True)
tenant_id = Column(Integer, ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False)
event_id = Column(Integer, ForeignKey("events.id", ondelete="CASCADE"), nullable=False)
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
user_id = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True)
guest_display_name = Column(String(150), nullable=True)
total_price = Column(Numeric(10, 2), nullable=False, default=0.00)
is_paid = Column(Boolean, default=False)
created_at = Column(DateTime, default=func.now())
@@ -103,6 +104,12 @@ class Order(Base):
user = relationship("User", back_populates="orders")
items = relationship("OrderItem", back_populates="order", cascade="all, delete-orphan")
@property
def display_name(self) -> str:
if self.user:
return f"{self.user.first_name} {self.user.last_name}"
return self.guest_display_name or "Gast"
class OrderItem(Base):
__tablename__ = "order_items"