from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime, Float, Numeric from sqlalchemy.types import TypeDecorator, VARCHAR, Integer from sqlalchemy_utils import EmailType from sqlalchemy.orm import relationship from database import Base import datetime class NullCatchingString(TypeDecorator): impl = VARCHAR def process_result_value(self, value, dialect): if value is None: return '' return value class NullCatchingInteger(TypeDecorator): impl = Integer def process_result_value(self, value, dialect): if value is None: return '' return value class Members(Base): __tablename__ = 'members' id = Column(Integer, primary_key=True, index=True) member_count = Column(Integer) member_firstname = Column(String, index=True) member_firstname_spouse = Column(NullCatchingString()) member_surname = Column(String, index=True) member_suffix = Column(NullCatchingString(), nullable=True) member_street = Column(NullCatchingString(), index=True) member_streetnumber = Column(NullCatchingString(), nullable=True) member_email = Column(EmailType, index=True) member_zip = Column(NullCatchingInteger(), index=True) member_city = Column(NullCatchingString(), index=True) member_active = Column(Boolean, default=True) member_gender = Column(String, nullable=True) member_connected = Column(Integer, ForeignKey("members.id"), nullable=True) created_date = Column(DateTime, default=datetime.datetime.utcnow) updated_date = Column(DateTime, default=datetime.datetime.utcnow) member_died = Column(DateTime) member_membership_start = Column(DateTime) member_printed = Column(Boolean, default=False) #member_coordinates = Column(Geometry(geometry_type='POINT')) member_geo_latitude = Column(Float, nullable=True) member_geo_longitude = Column(Float, nullable=True) member_deliveries = relationship('Deliveries', backref='members') #member_deliveries: Mapped[List["Deliveries"]] = relationship() def __repr__(self): return f'' class Payments(Base): __tablename__ = 'payments' id = Column(Integer, primary_key=True, index=True) payment_date = Column(DateTime, index=True) member_id = Column(Integer, ForeignKey("members.id")) payment_amount = Column(Numeric) payment_year = Column(DateTime, index=True) def __repr__(self): return f'' class Deliveries(Base): __tablename__ = 'deliveries' id = Column(Integer, primary_key=True, index=True) delivery_date = Column(DateTime, index=True) member_id = Column(Integer, ForeignKey("members.id")) delivered_by_id = Column(Integer) delivery_year = Column(DateTime, index=True) def __repr__(self): return f'' """ delivered_by_id = Column(Integer, ForeignKey("members.id" )) member = relationship("Members", foreign_keys=[member_id]) delivering_member = relationship("Members", foreign_keys=[member_id]) """ class Payments_CSV(Base): __tablename__ = 'payments_csv' id = Column(Integer, primary_key=True, index=True) pc_valuta_date = Column(DateTime) pc_client = Column(String) pc_reference = Column(String) pc_intended = Column(String) pc_iban = Column(String) pc_entry_date = Column(DateTime) pc_amount = Column(Numeric) pc_currency = Column(String) pc_timestamp = Column(DateTime) pc_processed = Column(Boolean, default=False)