"""VendorContract model.""" from abacus_common_logic.connectors.database import db from abacus_common_logic.models.base import CRUDMixin from sqlalchemy import Enum from abacus_legacy_sync.constants.constants import ( VENDOR_CONTRACT_ADMIN_DEAL_TYPES, VENDOR_CONTRACT_CONTRACT_TYPES, VENDOR_CONTRACT_DIG_DISTRIBUTION_TYPES, VENDOR_CONTRACT_EXCLUSIVE_VALUES, VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM, VENDOR_CONTRACT_OTHER_RIGHTS_OPTIONS, VENDOR_CONTRACT_PAY_AFTER_INTERVALS, VENDOR_CONTRACT_PAYMENT_INTERVALS, VENDOR_CONTRACT_RESPONSIBILITY_TYPES, VENDOR_CONTRACT_VENDOR_TYPES, VENDOR_CONTRACT_YES_NO_ENUM, ) class VendorContract(db.Model, CRUDMixin): """VendorContract model. This model maps `vendor_cotract` table from art_relations. The similar model also exists in ows-contract service. Inserts into this table also happen from Orchard Admin service (php). """ __tablename__ = 'vendor_contract' vendor_contract_id = db.Column('id', db.Integer, primary_key=True) vendor_id = db.Column(db.Integer, nullable=True) cont_start = db.Column(db.Date, nullable=True) cont_end = db.Column(db.Date, nullable=True) exclusive = db.Column( Enum(*VENDOR_CONTRACT_EXCLUSIVE_VALUES, name='exclusive', create_type=False), default=VENDOR_CONTRACT_EXCLUSIVE_VALUES.NO_BOTH, nullable=True, ) orchrep_name = db.Column(db.String(55), nullable=True) carve_out = db.Column(db.String(255), nullable=True) qualification_level = db.Column(db.String(44), nullable=True) territory_carve_out = db.Column(db.Text, nullable=True) dms_carve_out = db.Column(db.Text, nullable=True) dms_master_carve_out = db.Column(db.Text, nullable=True) encoding_fees_cap_back_ctlg = db.Column(db.Float, nullable=True) encoding_fees_cap_new_release = db.Column(db.Float, nullable=True) digital_split = db.Column(db.Float, nullable=True) physical_split = db.Column(db.Float, nullable=True) contract_type = db.Column( Enum(*VENDOR_CONTRACT_CONTRACT_TYPES, name='contract_type', create_type=False), default=VENDOR_CONTRACT_CONTRACT_TYPES.VENDOR_TERM, nullable=True, ) release_term = db.Column(db.Integer, nullable=True) advance_payment = db.Column(db.Float, nullable=True) advance_recoupable_percentage = db.Column(db.Float, nullable=True) dig_distribution_type = db.Column( Enum( *VENDOR_CONTRACT_DIG_DISTRIBUTION_TYPES, name='dig_distribution_type', create_type=False, ), default=VENDOR_CONTRACT_DIG_DISTRIBUTION_TYPES.DIGITAL_MOBILE, nullable=True, ) possible_track_restrictions = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='possible_track_restrictions', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) oms_type = db.Column( Enum( *VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM, name='oms_type', create_type=False ), default=VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM.NONE, nullable=True, ) oms_fee_percentage = db.Column(db.Float, nullable=False) negotiated_changes = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='negotiated_changes', create_type=False ), default=None, nullable=True, ) negotiated_change_comments = db.Column(db.Text, nullable=False) contract_complete = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='contract_complete', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) signature_date = db.Column(db.Date, nullable=False) marketing_restrictions = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='marketing_restrictions', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) orchard_assignment_right_restriction = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='orchard_assignment_right_restriction', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) currency_id = db.Column(db.Integer, nullable=True, default='1') third_party_responsibility = db.Column( Enum( *VENDOR_CONTRACT_RESPONSIBILITY_TYPES, name='third_party_responsibility', create_type=False, ), default=VENDOR_CONTRACT_RESPONSIBILITY_TYPES.STANDARD, nullable=True, ) third_party_responsibility_detail = db.Column(db.Text, nullable=True) possible_track_restriction_detail = db.Column(db.Text, nullable=True) is_amendment = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='is_amendment', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) extend_until_recouped = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='extend_until_recouped', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) sync_admin_territory = db.Column(db.Text, nullable=True) sync_admin_commission = db.Column(db.Text, nullable=True) sync_admin_type_of_deal = db.Column( Enum( *VENDOR_CONTRACT_ADMIN_DEAL_TYPES, name='sync_admin_type_of_deal', create_type=False, ), default=None, nullable=True, ) royalty_collection_territory = db.Column(db.Text, nullable=True) royalty_collection_commission = db.Column(db.Float, nullable=True) publishing_admin_commission = db.Column(db.Float, nullable=True) publishing_admin_territory = db.Column(db.Text, nullable=True) publishing_admin_limit_grant_of_rights = db.Column(db.String(50), nullable=True) publishing_admin_misc_provisions = db.Column(db.String(50), nullable=True) parent_vendor_contract_id = db.Column(db.Integer, nullable=True) vendor_type = db.Column( Enum(*VENDOR_CONTRACT_VENDOR_TYPES, name='vendor_type', create_type=False), default=VENDOR_CONTRACT_VENDOR_TYPES.VENDOR, nullable=True, ) vendor_proposed_term_id = db.Column(db.Integer, nullable=True) sync_admin_response_time = db.Column(db.Integer, nullable=True) ringtone_publishing_type = db.Column( Enum( *VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM, name='ringtone_publishing_type', create_type=False, ), default=VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM.NONE, nullable=True, ) physical_track_publishing_type = db.Column( Enum( *VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM, name='physical_track_publishing_type', create_type=False, ), default=VENDOR_CONTRACT_ORCHARD_OR_LABEL_ENUM.NONE, nullable=True, ) unlimited_roll = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='unlimited_roll', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) rollover_length_in_months = db.Column(db.Integer, nullable=False) can_terminate = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='can_terminate', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) youtube_composition_clause = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='youtube_composition_clause', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) sx_royalty_collection_commission = db.Column(db.Float, nullable=False, default='0') topspin_rate = db.Column(db.Float, nullable=False, default='0') topspin_rate_territory = db.Column(db.Text, nullable=False) notice_required_in_days = db.Column(db.Integer, nullable=False) term_continues_until_recouped = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='term_continues_until_recouped', create_type=False, ), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) brand_split = db.Column(db.Float, nullable=False) other_rights_option = db.Column( Enum( *VENDOR_CONTRACT_OTHER_RIGHTS_OPTIONS, name='other_rights_option', create_type=False, ), default=VENDOR_CONTRACT_OTHER_RIGHTS_OPTIONS.ANY_AND_ALL, nullable=True, ) other_rights_text = db.Column(db.String(50), nullable=True) special_product_split = db.Column(db.Float, nullable=True) special_product_carve_out = db.Column(db.Text, nullable=True) payment_interval = db.Column( Enum( *VENDOR_CONTRACT_PAYMENT_INTERVALS, name='payment_interval', create_type=False, ), default=VENDOR_CONTRACT_PAYMENT_INTERVALS.QUARTER, nullable=True, ) pay_after = db.Column( Enum(*VENDOR_CONTRACT_PAY_AFTER_INTERVALS, name='pay_after', create_type=False), default=VENDOR_CONTRACT_PAY_AFTER_INTERVALS.AFTER_45, nullable=True, ) show_credit_card = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='show_credit_card', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) opt_out = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='opt_out', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) apply_fx_spread = db.Column( Enum(*VENDOR_CONTRACT_YES_NO_ENUM, name='apply_fx_spread', create_type=False), default=VENDOR_CONTRACT_YES_NO_ENUM.NO, nullable=True, ) reserve_rate = db.Column(db.Float, nullable=False, default='0.00') number_of_months_before_payout = db.Column(db.Integer, nullable=False, default='0') number_of_installments = db.Column(db.Integer, nullable=False, default='0') contract_terms = db.Column(db.Text, nullable=False) service_type_id = db.Column(db.Integer, nullable=False) is_automatic_rollover = db.Column( Enum( *VENDOR_CONTRACT_YES_NO_ENUM, name='is_automatic_rollover', create_type=False, ), default=None, nullable=True, ) vendor_contract_distribution_type = db.relationship( 'VendorContractDistributionType', backref='vendor_contract', cascade='all, delete-orphan', ) vendor_dms_master_restriction = db.relationship( 'VendorDmsMasterRestriction', backref='vendor_contract', cascade='all, delete-orphan', )