"""Manual Adjustment model.""" from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy import Float from sqlalchemy import ForeignKey from sqlalchemy import func from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy import Text from sqlalchemy import TIMESTAMP from sqlalchemy.orm import relationship from manualadjustment.connectors import mysql # imported because we need the side effect for SA relationships from manualadjustment.models import release_manual_adjustment # noqa class ManualAdjustment(mysql.ArtRelationsBaseModel): """Model for the manual_adjustment table.""" __tablename__ = 'manual_adjustment' id = Column( # noqa Integer, primary_key=True, autoincrement=True, nullable=False) parent_type = Column(Enum('vendor', 'oms_client', 'publisher', 'partner')) parent_id = Column(Integer, nullable=False) date_added = Column(DateTime, default=func.now()) created_by = Column(Integer) amount = Column(Float(precision=18, decimal_return_scale=6)) comment = Column(Text) category_id = Column( Integer, ForeignKey('manual_adjustment_category.category_id')) adjust_for_period_id = Column(Integer, ForeignKey('period.period_id')) adjust_for_period = relationship( 'Period', foreign_keys=[adjust_for_period_id], lazy='joined') apply_to_period_id = Column(Integer, ForeignKey('period.period_id')) apply_to_period = relationship( 'Period', foreign_keys=[apply_to_period_id], lazy='joined') currencies_id = Column(Integer) amount_in_original_currency = Column( Float(precision=18, decimal_return_scale=6)) attachment_location = Column(String(255)) updated_timestamp = Column( TIMESTAMP, server_default=func.now(), onupdate=func.current_timestamp()) last_modified_by = Column(Integer) user_type = Column(Enum('oa', 'alw', 'system')) category = relationship( 'ManualAdjustmentCategory', foreign_keys=[category_id], lazy='joined') release_manual_adjustments = relationship( 'ReleaseManualAdjustment', back_populates='manual_adjustment') adjust_for_quarter = Column(Integer) apply_to_quarter = Column(Integer) adjust_for_year = Column(Integer) apply_to_year = Column(Integer) category = Column(Enum('label_earnings', 'publisher_earnings', 'legal_fees', 'label_publisher_costs', 'admin_fees', 'reclass_between_labels', 'returned_check', 'stale_dated_check'), nullable=True)