"""V1 Vendor schema.""" from marshmallow import EXCLUDE, Schema, fields, validate from marshmallow.validate import OneOf from account.constants import constants class CreateVendorSchema(Schema): """V1 Create/Update Vendor schema. Properties: -email (str): the email for this Vendor -vendor_name (str): full name of the Vendor -owner (str): Owner of this Vendor. -label_identifier (str): Identifier for this vendor. -status (list): Vendor Status. -company_brand (str): Company's brand name. eg: awal, columbia, theorchard, hrs -service_tier_uuid (str): unique id for service tier. -country (str | None): Country of tax residence, iso alpha3 format. Optional. -assigned_to (int): Foreign key to orchadmin_users table. Optional. -assigned_reviewer (int | None): Foreign key to orchadmin_users table. Optional. -quarterback_label_manager (int | None): Foreign key to orchadmin_users table. Optional. -source (str): The source that is creating the vendor -vendor_uuid (str | None): unique uuid for vendor. Optional. -closer_id (int | None): Closer ID to assign to the vendor (creates only). Optional. """ email = fields.String(required=True) vendor_name = fields.String(required=False) vendor_id = fields.Integer(required=False) is_distributor = fields.String(validate=OneOf(constants.BOOLEAN_IDENTIFIER), required=False) owner = fields.String(required=False) company_brand = fields.String(required=False) if company_brand == constants.COMPANY_BRAND[0]: owner = fields.String(constants.GDA_OWNERS[2], required=False) label_identifier = fields.Str(validate=OneOf(constants.LABEL_IDENTIFIER), required=False) status = fields.Str(validate=OneOf(constants.VENDOR_STATUS), required=False) service_tier_uuid = fields.Str(validate=OneOf(constants.SERVICE_TIER_UUIDS), required=True) migrated_to_abacus = fields.Boolean(required=False) country = fields.Str(validate=[validate.Length(equal=3)], required=False) assigned_to = fields.Integer(required=False) assigned_reviewer = fields.Integer(required=False) quarterback_label_manager = fields.Integer(required=False) source = fields.String(required=True) external_identifier_1 = fields.String(required=False) vendor_uuid = fields.String(required=False) closer_id = fields.Integer(required=False) class V2CreateVendorSchema(Schema): """V2 Create vendor schema. Properties: -name (str): Full name of the Vendor. -owner (str): Owner of this Vendor (what business unit it maps back to). -company_brand (str): Company's brand name. -service_tier_uuid (str): Unique ID for service tier. -payment_currency (str): 3-char currency code. -is_distributor (bool): Whether the vendor is a distributor. Optional. -country (str | None): Country of tax residence, ISO alpha-3 format. Optional. -primary_genre (int | None): Primary genre ID. Optional. -label_summary (str | None): Label summary text. Optional. -assigned_to (int | None): Relationship Manager (orchadmin_users.id). Optional. -assigned_reviewer (int | None): Content Review assignee (orchadmin_users.id). Optional. -quarterback_label_manager (int | None): Secondary Relationship Manager (orchadmin_users.id). Optional. -wel_email_sender (int | None): Welcome Email Sender (orchadmin_users.id). Optional. -product_manager (int | None): Product Manager (orchadmin_users.id). Optional. -closers (list[int] | None): Closer ids (orchadmin_users.id) credited with the deal. Applied via vendor closers within the create. Optional. """ # Ignore unknown request body fields (instead of raising) class Meta: unknown = EXCLUDE name = fields.String(required=True) owner = fields.String(required=True) company_brand = fields.String( validate=OneOf(constants.COMPANY_BRAND), required=True, ) service_tier_uuid = fields.String(validate=OneOf(constants.SERVICE_TIER_UUIDS), required=True) # Not persisted to the vendor table — passed through to the post-creation account event payload. payment_currency = fields.String(required=True) is_distributor = fields.Boolean( load_default=False, dump_default=False, required=False, truthy={True}, falsy={False}, ) country = fields.Str(validate=[validate.Length(equal=3)], required=False, load_default=None) primary_genre = fields.Integer(required=False, load_default=None) label_summary = fields.Str(required=False, load_default=None) # Relationship Manager (orchadmin_users.id): responsible for client relationship and success. assigned_to = fields.Integer(required=False, load_default=None) # Content Review assignee (orchadmin_users.id): approves client product before delivery. assigned_reviewer = fields.Integer(required=False, load_default=None) # Secondary Relationship Manager (orchadmin_users.id): backup point of contact for the label. quarterback_label_manager = fields.Integer(required=False, load_default=None) # Welcome Email Sender (orchadmin_users.id): orchadmin user who triggered the welcome email. wel_email_sender = fields.Integer(required=False, load_default=None) # Product Manager (orchadmin_users.id): manages the label's product delivery. product_manager = fields.Integer(required=False, load_default=None) # Closer(s) (orchadmin_users.id): salesperson(s) credited with closing the deal. closers = fields.List(fields.Integer(), required=False, load_default=None)