Add frontend, member_state_log, etc.

This commit is contained in:
2025-07-29 14:47:03 +02:00
parent ebed331760
commit 4be0e48442
19 changed files with 5962 additions and 5 deletions
+47 -3
View File
@@ -1,11 +1,21 @@
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime, Float, Numeric
from sqlalchemy.types import TypeDecorator, VARCHAR, Integer
from sqlalchemy.types import TypeDecorator, VARCHAR, Integer, CHAR
from sqlalchemy_utils import EmailType
from sqlalchemy.orm import relationship
from models.database import Base
#from models.database import Base
from sustApp.models.database import Base
import datetime
class TrimChar(TypeDecorator):
impl = CHAR
cache_key = False
def process_result_value(self, value, dialect):
if value:
value = value.strip()
return value
class NullCatchingString(TypeDecorator):
impl = VARCHAR
@@ -50,6 +60,18 @@ class Members(Base):
member_deliveries = relationship('Deliveries', backref='members')
member_payments = relationship('Payments', backref='members')
#member_deliveries: Mapped[List["Deliveries"]] = relationship()
#current_state_code = Column(String, index=True)
#current_state_name = relationship('MemberStates', backref='state_code')
current_state_code = Column(TrimChar, index=True) # No foreign key
current_state_changed_at = Column(DateTime)
# Use primaryjoin to specify the join condition
current_state = relationship(
'MemberStates',
primaryjoin='Members.current_state_code == MemberStates.state_code',
foreign_keys=[current_state_code]
)
def __repr__(self):
return f'<Comment "{self.content[:20]}...">'
@@ -95,4 +117,26 @@ class Payments_CSV(Base):
pc_amount = Column(Numeric)
pc_currency = Column(String)
pc_timestamp = Column(DateTime)
pc_processed = Column(Boolean, default=False)
pc_processed = Column(Boolean, default=False)
class MemberStates(Base):
__tablename__ = 'member_states'
state_code = Column(TrimChar, primary_key=True, index=True)
state_name = Column(String(20), nullable=False)
description = Column(String)
created_at = Column(DateTime)
class MemberStateLog(Base):
__tablename__ = 'member_state_log'
log_id = Column(Integer, primary_key=True)
member_id = Column(Integer, ForeignKey('members.id'), nullable=False)
state_code = Column(String(1), ForeignKey('member_states.state_code'), nullable=False)
changed_at = Column(DateTime)
changed_by = Column(Integer) # Optional: user ID who made the change
reason = Column(String)
# Relationships
member = relationship('Members', backref='state_history')
state = relationship('MemberStates')