Add frontend, member_state_log, etc.
This commit is contained in:
@@ -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')
|
||||
Reference in New Issue
Block a user