"""mindbodypublicapi.

This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ).
"""

# ruff: noqa: E501
from mindbodypublicapi.api_helper import APIHelper
from mindbodypublicapi.models.assigned_client_index import (
    AssignedClientIndex,
)
from mindbodypublicapi.models.client_credit_card import (
    ClientCreditCard,
)
from mindbodypublicapi.models.client_relationship import (
    ClientRelationship,
)
from mindbodypublicapi.models.client_suspension_info import (
    ClientSuspensionInfo,
)
from mindbodypublicapi.models.custom_client_field_value import (
    CustomClientFieldValue,
)
from mindbodypublicapi.models.liability import (
    Liability,
)
from mindbodypublicapi.models.location import (
    Location,
)
from mindbodypublicapi.models.prospect_stage import (
    ProspectStage,
)
from mindbodypublicapi.models.sales_rep import (
    SalesRep,
)


class ClientWithSuspensionInfo(object):
    """Implementation of the 'ClientWithSuspensionInfo' model.

    A Client DTO with Suspension Informatoin

    Attributes:
        suspension_info (ClientSuspensionInfo): A Client DTO with Suspension
            Informatoin
        appointment_gender_preference (AppointmentGenderPreference1Enum): The gender
            of staff member with whom the client prefers to book appointments.
        birth_date (datetime): The client’s date of birth.
        country (str): The client’s country.
        creation_date (datetime): The date the client’s profile was created and added
            to the business, either by the client from the online store, or by a
            staff member. This value always returns in the format
            `yyyy-mm-ddThh:mm:ss:ms`.
        custom_client_fields (List[CustomClientFieldValue]): Contains information
            about the custom fields used for clients in the business.
        client_credit_card (ClientCreditCard): A client credit card.
        client_indexes (List[AssignedClientIndex]): Contains the IDs of the client’s
            assigned ClientIndexes and ClientIndexValues.    If an index is already
            assigned to the client, it is overwritten with the passed index value.
            You cannot currently remove client indexes using the Public API. Only the
            indexes passed in the request are returned in the response.
        client_relationships (List[ClientRelationship]): Contains information about
            the relationship between two clients.    This parameter does not include
            all of the relationships assigned to the client, only the ones passed in
            the request.
        first_appointment_date (datetime): The date of the client’s first booked
            appointment at the business.
        first_class_date (datetime): The date of the clients first booked class at
            the business.
        first_name (str): The client’s first name.
        id (str): The client’s ID, as configured by the business owner. This is the
            client’s barcode ID if the business owner assigns barcodes to clients.
            This ID is used throughout the Public API for client-related Public API
            calls. When used in a POST `UpdateClient` request, the `Id` is used to
            identify the client for the update.
        is_company (bool): When `true`, indicates that the client should be marked as
            a company at the business.<br />  When `false`, indicates the client is
            an individual and does not represent a company.
        is_prospect (bool): This value is set only if the business owner allows
            individuals to be prospects.<br />  When `true`, indicates that the
            client should be marked as a prospect for the business.<br />  When
            `false`, indicates that the client should not be marked as a prospect for
            the business.
        last_name (str): The client’s last name.
        liability (Liability): The model property of type Liability.
        liability_release (bool): Passing `true` sets the client’s liability
            information as follows:  * `IsReleased` is set to `true`.  *
            `AgreementDate` is set to the time zone of the business when the call was
            processed.  * `ReleasedBy` is set to `null` if the call is made by the
            client, `0` if the call was made by the business owner, or to a specific
            staff member’s ID if a staff member made the call.  Passing `false` sets
            the client’s liability information as follows:  * `IsReleased` is set to
            `false`.  * `AgreementDate` is set to `null`.  * `ReleasedBy` is set to
            `null`.
        membership_icon (int): The ID of the [membership
            icon](https://support.mindbodyonline.com/s/article/203259703-Membership-Se
            tup-screen?language=en_US) displayed next to the client’s name, if the
            client has a membership on their account.
        mobile_provider (int): The client’s mobile provider.
        notes (str): Any notes entered on the client’s account by staff members. This
            value should never be shown to clients unless the business owner has a
            specific reason for showing them.
        state (str): The client’s state.
        unique_id (int): The client’s system-generated ID at the business. This value
            cannot be changed by business owners and is always unique across all
            clients at the business. This ID is not widely used in the Public API,
            but can be used by your application to uniquely identify clients.
        last_modified_date_time (datetime): The UTC date and time when the client’s
            information was last modified.
        red_alert (str): Contains any red alert information entered by the business
            owner for the client.
        yellow_alert (str): Contains any yellow alert information entered by the
            business owner for the client.
        middle_name (str): The client’s middle name.
        prospect_stage (ProspectStage): The model property of type ProspectStage.
        email (str): The client’s email address.
        mobile_phone (str): The client’s mobile phone number.
        home_phone (str): The client’s home phone number.
        work_phone (str): The client’s work phone number.
        account_balance (float): The client’s current [account
            balance](https://mindbody-online-support.force.com/support/s/article/20326
            2013-Adding-account-payments-video-tutorial?language=en_US).
        address_line_1 (str): The first line of the client’s street address.
        address_line_2 (str): The second line of the client’s street address, if
            needed.
        city (str): The client’s city.
        postal_code (str): The client’s postal code.
        work_extension (str): The client’s work phone extension number.
        referred_by (str): Specifies how the client was referred to the business. You
            can get a list of possible strings using the `GetClientReferralTypes`
            endpoint.
        photo_url (str): The URL of the client’s photo for the client profile.
        emergency_contact_info_name (str): The name of the client’s emergency contact.
        emergency_contact_info_email (str): The email address of the client’s
            emergency contact.
        emergency_contact_info_phone (str): The phone number of the client’s
            emergency contact.
        emergency_contact_info_relationship (str): The client’s relationship with the
            emergency contact.
        gender (str): The gender of the client.
        last_formula_notes (str): The last [formula
            note](https://support.mindbodyonline.com/s/article/203259903-Appointments-
            Formula-notes?language=en_US) entered for the client.
        active (bool): When `true`, indicates that the client’s profile is marked as
            active on the site.<br />  When `false`, the client’s profile is
            inactive.  Defaults to `true` based on the assumption that if a client is
            currently inactive OR is to be marked inactive, this property will
            explicitly be mapped/set to `false`.
        sales_reps (List[SalesRep]): A list of sales representatives.
        status (str): The status of the client in the business. Possible values are:
            * Declined  * Non-Member  * Active  * Expired  * Suspended  * Terminated
        action (Action1Enum): The action taken.
        send_account_emails (bool): When `true`, indicates that the client has opted
            to receive general account notifications by email. This property is
            editable.   <br />Default: **false**
        send_account_texts (bool): When `true`, indicates that the client has opted
            to receive general account notifications by text message. This parameter
            cannot be updated by developers. If included in a request, it is ignored.
        send_promotional_emails (bool): When `true`, indicates that the client has
            opted to receive promotional notifications by email. This property is
            editable.   <br />Default: **false**
        send_promotional_texts (bool): When `true`, indicates that the client has
            opted to receive promotional notifications by text message. This
            parameter cannot be updated by developers. If included in a request, it
            is ignored.
        send_schedule_emails (bool): When `true`, indicates that the client has opted
            to receive schedule notifications by email. This property is editable.
            <br />Default: **false**
        send_schedule_texts (bool): When `true`, indicates that the client has opted
            to receive schedule notifications by text message. This parameter cannot
            be updated by developers. If included in a request, it is ignored.
        home_location (Location): The model property of type Location.
        locker_number (str): The clients locker number.

    """

    # Create a mapping from Model property names to API property names
    _names = {
        "suspension_info": "SuspensionInfo",
        "appointment_gender_preference": "AppointmentGenderPreference",
        "birth_date": "BirthDate",
        "country": "Country",
        "creation_date": "CreationDate",
        "custom_client_fields": "CustomClientFields",
        "client_credit_card": "ClientCreditCard",
        "client_indexes": "ClientIndexes",
        "client_relationships": "ClientRelationships",
        "first_appointment_date": "FirstAppointmentDate",
        "first_class_date": "FirstClassDate",
        "first_name": "FirstName",
        "id": "Id",
        "is_company": "IsCompany",
        "is_prospect": "IsProspect",
        "last_name": "LastName",
        "liability": "Liability",
        "liability_release": "LiabilityRelease",
        "membership_icon": "MembershipIcon",
        "mobile_provider": "MobileProvider",
        "notes": "Notes",
        "state": "State",
        "unique_id": "UniqueId",
        "last_modified_date_time": "LastModifiedDateTime",
        "red_alert": "RedAlert",
        "yellow_alert": "YellowAlert",
        "middle_name": "MiddleName",
        "prospect_stage": "ProspectStage",
        "email": "Email",
        "mobile_phone": "MobilePhone",
        "home_phone": "HomePhone",
        "work_phone": "WorkPhone",
        "account_balance": "AccountBalance",
        "address_line_1": "AddressLine1",
        "address_line_2": "AddressLine2",
        "city": "City",
        "postal_code": "PostalCode",
        "work_extension": "WorkExtension",
        "referred_by": "ReferredBy",
        "photo_url": "PhotoUrl",
        "emergency_contact_info_name": "EmergencyContactInfoName",
        "emergency_contact_info_email": "EmergencyContactInfoEmail",
        "emergency_contact_info_phone": "EmergencyContactInfoPhone",
        "emergency_contact_info_relationship": "EmergencyContactInfoRelationship",
        "gender": "Gender",
        "last_formula_notes": "LastFormulaNotes",
        "active": "Active",
        "sales_reps": "SalesReps",
        "status": "Status",
        "action": "Action",
        "send_account_emails": "SendAccountEmails",
        "send_account_texts": "SendAccountTexts",
        "send_promotional_emails": "SendPromotionalEmails",
        "send_promotional_texts": "SendPromotionalTexts",
        "send_schedule_emails": "SendScheduleEmails",
        "send_schedule_texts": "SendScheduleTexts",
        "home_location": "HomeLocation",
        "locker_number": "LockerNumber",
    }

    _optionals = [
        "suspension_info",
        "appointment_gender_preference",
        "birth_date",
        "country",
        "creation_date",
        "custom_client_fields",
        "client_credit_card",
        "client_indexes",
        "client_relationships",
        "first_appointment_date",
        "first_class_date",
        "first_name",
        "id",
        "is_company",
        "is_prospect",
        "last_name",
        "liability",
        "liability_release",
        "membership_icon",
        "mobile_provider",
        "notes",
        "state",
        "unique_id",
        "last_modified_date_time",
        "red_alert",
        "yellow_alert",
        "middle_name",
        "prospect_stage",
        "email",
        "mobile_phone",
        "home_phone",
        "work_phone",
        "account_balance",
        "address_line_1",
        "address_line_2",
        "city",
        "postal_code",
        "work_extension",
        "referred_by",
        "photo_url",
        "emergency_contact_info_name",
        "emergency_contact_info_email",
        "emergency_contact_info_phone",
        "emergency_contact_info_relationship",
        "gender",
        "last_formula_notes",
        "active",
        "sales_reps",
        "status",
        "action",
        "send_account_emails",
        "send_account_texts",
        "send_promotional_emails",
        "send_promotional_texts",
        "send_schedule_emails",
        "send_schedule_texts",
        "home_location",
        "locker_number",
    ]

    def __init__(
        self,
        suspension_info=APIHelper.SKIP,
        appointment_gender_preference=APIHelper.SKIP,
        birth_date=APIHelper.SKIP,
        country=APIHelper.SKIP,
        creation_date=APIHelper.SKIP,
        custom_client_fields=APIHelper.SKIP,
        client_credit_card=APIHelper.SKIP,
        client_indexes=APIHelper.SKIP,
        client_relationships=APIHelper.SKIP,
        first_appointment_date=APIHelper.SKIP,
        first_class_date=APIHelper.SKIP,
        first_name=APIHelper.SKIP,
        id=APIHelper.SKIP,
        is_company=APIHelper.SKIP,
        is_prospect=APIHelper.SKIP,
        last_name=APIHelper.SKIP,
        liability=APIHelper.SKIP,
        liability_release=APIHelper.SKIP,
        membership_icon=APIHelper.SKIP,
        mobile_provider=APIHelper.SKIP,
        notes=APIHelper.SKIP,
        state=APIHelper.SKIP,
        unique_id=APIHelper.SKIP,
        last_modified_date_time=APIHelper.SKIP,
        red_alert=APIHelper.SKIP,
        yellow_alert=APIHelper.SKIP,
        middle_name=APIHelper.SKIP,
        prospect_stage=APIHelper.SKIP,
        email=APIHelper.SKIP,
        mobile_phone=APIHelper.SKIP,
        home_phone=APIHelper.SKIP,
        work_phone=APIHelper.SKIP,
        account_balance=APIHelper.SKIP,
        address_line_1=APIHelper.SKIP,
        address_line_2=APIHelper.SKIP,
        city=APIHelper.SKIP,
        postal_code=APIHelper.SKIP,
        work_extension=APIHelper.SKIP,
        referred_by=APIHelper.SKIP,
        photo_url=APIHelper.SKIP,
        emergency_contact_info_name=APIHelper.SKIP,
        emergency_contact_info_email=APIHelper.SKIP,
        emergency_contact_info_phone=APIHelper.SKIP,
        emergency_contact_info_relationship=APIHelper.SKIP,
        gender=APIHelper.SKIP,
        last_formula_notes=APIHelper.SKIP,
        active=APIHelper.SKIP,
        sales_reps=APIHelper.SKIP,
        status=APIHelper.SKIP,
        action=APIHelper.SKIP,
        send_account_emails=APIHelper.SKIP,
        send_account_texts=APIHelper.SKIP,
        send_promotional_emails=APIHelper.SKIP,
        send_promotional_texts=APIHelper.SKIP,
        send_schedule_emails=APIHelper.SKIP,
        send_schedule_texts=APIHelper.SKIP,
        home_location=APIHelper.SKIP,
        locker_number=APIHelper.SKIP):
        """Initialize a ClientWithSuspensionInfo instance."""
        # Initialize members of the class
        if suspension_info is not APIHelper.SKIP:
            self.suspension_info = suspension_info
        if appointment_gender_preference is not APIHelper.SKIP:
            self.appointment_gender_preference = appointment_gender_preference
        if birth_date is not APIHelper.SKIP:
            self.birth_date =\
                 APIHelper.apply_datetime_converter(
                birth_date, APIHelper.RFC3339DateTime)\
                 if birth_date else None
        if country is not APIHelper.SKIP:
            self.country = country
        if creation_date is not APIHelper.SKIP:
            self.creation_date =\
                 APIHelper.apply_datetime_converter(
                creation_date, APIHelper.RFC3339DateTime)\
                 if creation_date else None
        if custom_client_fields is not APIHelper.SKIP:
            self.custom_client_fields = custom_client_fields
        if client_credit_card is not APIHelper.SKIP:
            self.client_credit_card = client_credit_card
        if client_indexes is not APIHelper.SKIP:
            self.client_indexes = client_indexes
        if client_relationships is not APIHelper.SKIP:
            self.client_relationships = client_relationships
        if first_appointment_date is not APIHelper.SKIP:
            self.first_appointment_date =\
                 APIHelper.apply_datetime_converter(
                first_appointment_date, APIHelper.RFC3339DateTime)\
                 if first_appointment_date else None
        if first_class_date is not APIHelper.SKIP:
            self.first_class_date =\
                 APIHelper.apply_datetime_converter(
                first_class_date, APIHelper.RFC3339DateTime)\
                 if first_class_date else None
        if first_name is not APIHelper.SKIP:
            self.first_name = first_name
        if id is not APIHelper.SKIP:
            self.id = id
        if is_company is not APIHelper.SKIP:
            self.is_company = is_company
        if is_prospect is not APIHelper.SKIP:
            self.is_prospect = is_prospect
        if last_name is not APIHelper.SKIP:
            self.last_name = last_name
        if liability is not APIHelper.SKIP:
            self.liability = liability
        if liability_release is not APIHelper.SKIP:
            self.liability_release = liability_release
        if membership_icon is not APIHelper.SKIP:
            self.membership_icon = membership_icon
        if mobile_provider is not APIHelper.SKIP:
            self.mobile_provider = mobile_provider
        if notes is not APIHelper.SKIP:
            self.notes = notes
        if state is not APIHelper.SKIP:
            self.state = state
        if unique_id is not APIHelper.SKIP:
            self.unique_id = unique_id
        if last_modified_date_time is not APIHelper.SKIP:
            self.last_modified_date_time =\
                 APIHelper.apply_datetime_converter(
                last_modified_date_time, APIHelper.RFC3339DateTime)\
                 if last_modified_date_time else None
        if red_alert is not APIHelper.SKIP:
            self.red_alert = red_alert
        if yellow_alert is not APIHelper.SKIP:
            self.yellow_alert = yellow_alert
        if middle_name is not APIHelper.SKIP:
            self.middle_name = middle_name
        if prospect_stage is not APIHelper.SKIP:
            self.prospect_stage = prospect_stage
        if email is not APIHelper.SKIP:
            self.email = email
        if mobile_phone is not APIHelper.SKIP:
            self.mobile_phone = mobile_phone
        if home_phone is not APIHelper.SKIP:
            self.home_phone = home_phone
        if work_phone is not APIHelper.SKIP:
            self.work_phone = work_phone
        if account_balance is not APIHelper.SKIP:
            self.account_balance = account_balance
        if address_line_1 is not APIHelper.SKIP:
            self.address_line_1 = address_line_1
        if address_line_2 is not APIHelper.SKIP:
            self.address_line_2 = address_line_2
        if city is not APIHelper.SKIP:
            self.city = city
        if postal_code is not APIHelper.SKIP:
            self.postal_code = postal_code
        if work_extension is not APIHelper.SKIP:
            self.work_extension = work_extension
        if referred_by is not APIHelper.SKIP:
            self.referred_by = referred_by
        if photo_url is not APIHelper.SKIP:
            self.photo_url = photo_url
        if emergency_contact_info_name is not APIHelper.SKIP:
            self.emergency_contact_info_name = emergency_contact_info_name
        if emergency_contact_info_email is not APIHelper.SKIP:
            self.emergency_contact_info_email = emergency_contact_info_email
        if emergency_contact_info_phone is not APIHelper.SKIP:
            self.emergency_contact_info_phone = emergency_contact_info_phone
        if emergency_contact_info_relationship is not APIHelper.SKIP:
            self.emergency_contact_info_relationship =\
                 emergency_contact_info_relationship
        if gender is not APIHelper.SKIP:
            self.gender = gender
        if last_formula_notes is not APIHelper.SKIP:
            self.last_formula_notes = last_formula_notes
        if active is not APIHelper.SKIP:
            self.active = active
        if sales_reps is not APIHelper.SKIP:
            self.sales_reps = sales_reps
        if status is not APIHelper.SKIP:
            self.status = status
        if action is not APIHelper.SKIP:
            self.action = action
        if send_account_emails is not APIHelper.SKIP:
            self.send_account_emails = send_account_emails
        if send_account_texts is not APIHelper.SKIP:
            self.send_account_texts = send_account_texts
        if send_promotional_emails is not APIHelper.SKIP:
            self.send_promotional_emails = send_promotional_emails
        if send_promotional_texts is not APIHelper.SKIP:
            self.send_promotional_texts = send_promotional_texts
        if send_schedule_emails is not APIHelper.SKIP:
            self.send_schedule_emails = send_schedule_emails
        if send_schedule_texts is not APIHelper.SKIP:
            self.send_schedule_texts = send_schedule_texts
        if home_location is not APIHelper.SKIP:
            self.home_location = home_location
        if locker_number is not APIHelper.SKIP:
            self.locker_number = locker_number

    @classmethod
    def from_dictionary(cls,
                        dictionary):
        """Create an instance of this model from a dictionary

        Args:
            dictionary (dictionary): A dictionary representation of the object
            as obtained from the deserialization of the server's response. The
            keys MUST match property names in the API description.

        Returns:
            object: An instance of this structure class.

        """
        if not isinstance(dictionary, dict) or dictionary is None:
            return None

        # Extract variables from the dictionary
        suspension_info =\
            ClientSuspensionInfo.from_dictionary(
                dictionary.get("SuspensionInfo"))\
                if "SuspensionInfo" in dictionary.keys()\
                else APIHelper.SKIP
        appointment_gender_preference =\
            dictionary.get("AppointmentGenderPreference")\
            if dictionary.get("AppointmentGenderPreference")\
                else APIHelper.SKIP
        birth_date = APIHelper.RFC3339DateTime.from_value(
            dictionary.get("BirthDate")).datetime\
            if dictionary.get("BirthDate") else APIHelper.SKIP
        country =\
            dictionary.get("Country")\
            if dictionary.get("Country")\
                else APIHelper.SKIP
        creation_date = APIHelper.RFC3339DateTime.from_value(
            dictionary.get("CreationDate")).datetime\
            if dictionary.get("CreationDate") else APIHelper.SKIP
        custom_client_fields = None
        if dictionary.get("CustomClientFields") is not None:
            custom_client_fields = [
                CustomClientFieldValue.from_dictionary(x)
                    for x in dictionary.get("CustomClientFields")
            ]
        else:
            custom_client_fields = APIHelper.SKIP
        client_credit_card =\
            ClientCreditCard.from_dictionary(
                dictionary.get("ClientCreditCard"))\
                if "ClientCreditCard" in dictionary.keys()\
                else APIHelper.SKIP
        client_indexes = None
        if dictionary.get("ClientIndexes") is not None:
            client_indexes = [
                AssignedClientIndex.from_dictionary(x)
                    for x in dictionary.get("ClientIndexes")
            ]
        else:
            client_indexes = APIHelper.SKIP
        client_relationships = None
        if dictionary.get("ClientRelationships") is not None:
            client_relationships = [
                ClientRelationship.from_dictionary(x)
                    for x in dictionary.get("ClientRelationships")
            ]
        else:
            client_relationships = APIHelper.SKIP
        first_appointment_date = APIHelper.RFC3339DateTime.from_value(
            dictionary.get("FirstAppointmentDate")).datetime\
            if dictionary.get("FirstAppointmentDate") else APIHelper.SKIP
        first_class_date = APIHelper.RFC3339DateTime.from_value(
            dictionary.get("FirstClassDate")).datetime\
            if dictionary.get("FirstClassDate") else APIHelper.SKIP
        first_name =\
            dictionary.get("FirstName")\
            if dictionary.get("FirstName")\
                else APIHelper.SKIP
        id =\
            dictionary.get("Id")\
            if dictionary.get("Id")\
                else APIHelper.SKIP
        is_company =\
            dictionary.get("IsCompany")\
            if "IsCompany" in dictionary.keys()\
                else APIHelper.SKIP
        is_prospect =\
            dictionary.get("IsProspect")\
            if "IsProspect" in dictionary.keys()\
                else APIHelper.SKIP
        last_name =\
            dictionary.get("LastName")\
            if dictionary.get("LastName")\
                else APIHelper.SKIP
        liability =\
            Liability.from_dictionary(
                dictionary.get("Liability"))\
                if "Liability" in dictionary.keys()\
                else APIHelper.SKIP
        liability_release =\
            dictionary.get("LiabilityRelease")\
            if "LiabilityRelease" in dictionary.keys()\
                else APIHelper.SKIP
        membership_icon =\
            dictionary.get("MembershipIcon")\
            if dictionary.get("MembershipIcon")\
                else APIHelper.SKIP
        mobile_provider =\
            dictionary.get("MobileProvider")\
            if dictionary.get("MobileProvider")\
                else APIHelper.SKIP
        notes =\
            dictionary.get("Notes")\
            if dictionary.get("Notes")\
                else APIHelper.SKIP
        state =\
            dictionary.get("State")\
            if dictionary.get("State")\
                else APIHelper.SKIP
        unique_id =\
            dictionary.get("UniqueId")\
            if dictionary.get("UniqueId")\
                else APIHelper.SKIP
        last_modified_date_time = APIHelper.RFC3339DateTime.from_value(
            dictionary.get("LastModifiedDateTime")).datetime\
            if dictionary.get("LastModifiedDateTime") else APIHelper.SKIP
        red_alert =\
            dictionary.get("RedAlert")\
            if dictionary.get("RedAlert")\
                else APIHelper.SKIP
        yellow_alert =\
            dictionary.get("YellowAlert")\
            if dictionary.get("YellowAlert")\
                else APIHelper.SKIP
        middle_name =\
            dictionary.get("MiddleName")\
            if dictionary.get("MiddleName")\
                else APIHelper.SKIP
        prospect_stage =\
            ProspectStage.from_dictionary(
                dictionary.get("ProspectStage"))\
                if "ProspectStage" in dictionary.keys()\
                else APIHelper.SKIP
        email =\
            dictionary.get("Email")\
            if dictionary.get("Email")\
                else APIHelper.SKIP
        mobile_phone =\
            dictionary.get("MobilePhone")\
            if dictionary.get("MobilePhone")\
                else APIHelper.SKIP
        home_phone =\
            dictionary.get("HomePhone")\
            if dictionary.get("HomePhone")\
                else APIHelper.SKIP
        work_phone =\
            dictionary.get("WorkPhone")\
            if dictionary.get("WorkPhone")\
                else APIHelper.SKIP
        account_balance =\
            dictionary.get("AccountBalance")\
            if dictionary.get("AccountBalance")\
                else APIHelper.SKIP
        address_line_1 =\
            dictionary.get("AddressLine1")\
            if dictionary.get("AddressLine1")\
                else APIHelper.SKIP
        address_line_2 =\
            dictionary.get("AddressLine2")\
            if dictionary.get("AddressLine2")\
                else APIHelper.SKIP
        city =\
            dictionary.get("City")\
            if dictionary.get("City")\
                else APIHelper.SKIP
        postal_code =\
            dictionary.get("PostalCode")\
            if dictionary.get("PostalCode")\
                else APIHelper.SKIP
        work_extension =\
            dictionary.get("WorkExtension")\
            if dictionary.get("WorkExtension")\
                else APIHelper.SKIP
        referred_by =\
            dictionary.get("ReferredBy")\
            if dictionary.get("ReferredBy")\
                else APIHelper.SKIP
        photo_url =\
            dictionary.get("PhotoUrl")\
            if dictionary.get("PhotoUrl")\
                else APIHelper.SKIP
        emergency_contact_info_name =\
            dictionary.get("EmergencyContactInfoName")\
            if dictionary.get("EmergencyContactInfoName")\
                else APIHelper.SKIP
        emergency_contact_info_email =\
            dictionary.get("EmergencyContactInfoEmail")\
            if dictionary.get("EmergencyContactInfoEmail")\
                else APIHelper.SKIP
        emergency_contact_info_phone =\
            dictionary.get("EmergencyContactInfoPhone")\
            if dictionary.get("EmergencyContactInfoPhone")\
                else APIHelper.SKIP
        emergency_contact_info_relationship =\
            dictionary.get("EmergencyContactInfoRelationship")\
            if dictionary.get("EmergencyContactInfoRelationship")\
                else APIHelper.SKIP
        gender =\
            dictionary.get("Gender")\
            if dictionary.get("Gender")\
                else APIHelper.SKIP
        last_formula_notes =\
            dictionary.get("LastFormulaNotes")\
            if dictionary.get("LastFormulaNotes")\
                else APIHelper.SKIP
        active =\
            dictionary.get("Active")\
            if "Active" in dictionary.keys()\
                else APIHelper.SKIP
        sales_reps = None
        if dictionary.get("SalesReps") is not None:
            sales_reps = [
                SalesRep.from_dictionary(x)
                    for x in dictionary.get("SalesReps")
            ]
        else:
            sales_reps = APIHelper.SKIP
        status =\
            dictionary.get("Status")\
            if dictionary.get("Status")\
                else APIHelper.SKIP
        action =\
            dictionary.get("Action")\
            if dictionary.get("Action")\
                else APIHelper.SKIP
        send_account_emails =\
            dictionary.get("SendAccountEmails")\
            if "SendAccountEmails" in dictionary.keys()\
                else APIHelper.SKIP
        send_account_texts =\
            dictionary.get("SendAccountTexts")\
            if "SendAccountTexts" in dictionary.keys()\
                else APIHelper.SKIP
        send_promotional_emails =\
            dictionary.get("SendPromotionalEmails")\
            if "SendPromotionalEmails" in dictionary.keys()\
                else APIHelper.SKIP
        send_promotional_texts =\
            dictionary.get("SendPromotionalTexts")\
            if "SendPromotionalTexts" in dictionary.keys()\
                else APIHelper.SKIP
        send_schedule_emails =\
            dictionary.get("SendScheduleEmails")\
            if "SendScheduleEmails" in dictionary.keys()\
                else APIHelper.SKIP
        send_schedule_texts =\
            dictionary.get("SendScheduleTexts")\
            if "SendScheduleTexts" in dictionary.keys()\
                else APIHelper.SKIP
        home_location =\
            Location.from_dictionary(
                dictionary.get("HomeLocation"))\
                if "HomeLocation" in dictionary.keys()\
                else APIHelper.SKIP
        locker_number =\
            dictionary.get("LockerNumber")\
            if dictionary.get("LockerNumber")\
                else APIHelper.SKIP

        # Return an object of this model
        return cls(suspension_info,
                   appointment_gender_preference,
                   birth_date,
                   country,
                   creation_date,
                   custom_client_fields,
                   client_credit_card,
                   client_indexes,
                   client_relationships,
                   first_appointment_date,
                   first_class_date,
                   first_name,
                   id,
                   is_company,
                   is_prospect,
                   last_name,
                   liability,
                   liability_release,
                   membership_icon,
                   mobile_provider,
                   notes,
                   state,
                   unique_id,
                   last_modified_date_time,
                   red_alert,
                   yellow_alert,
                   middle_name,
                   prospect_stage,
                   email,
                   mobile_phone,
                   home_phone,
                   work_phone,
                   account_balance,
                   address_line_1,
                   address_line_2,
                   city,
                   postal_code,
                   work_extension,
                   referred_by,
                   photo_url,
                   emergency_contact_info_name,
                   emergency_contact_info_email,
                   emergency_contact_info_phone,
                   emergency_contact_info_relationship,
                   gender,
                   last_formula_notes,
                   active,
                   sales_reps,
                   status,
                   action,
                   send_account_emails,
                   send_account_texts,
                   send_promotional_emails,
                   send_promotional_texts,
                   send_schedule_emails,
                   send_schedule_texts,
                   home_location,
                   locker_number)

    def __repr__(self):
        """Return a unambiguous string representation."""
        _suspension_info=(
            self.suspension_info
            if hasattr(self, "suspension_info")
            else None
        )
        _appointment_gender_preference=(
            self.appointment_gender_preference
            if hasattr(self, "appointment_gender_preference")
            else None
        )
        _birth_date=(
            self.birth_date
            if hasattr(self, "birth_date")
            else None
        )
        _country=(
            self.country
            if hasattr(self, "country")
            else None
        )
        _creation_date=(
            self.creation_date
            if hasattr(self, "creation_date")
            else None
        )
        _custom_client_fields=(
            self.custom_client_fields
            if hasattr(self, "custom_client_fields")
            else None
        )
        _client_credit_card=(
            self.client_credit_card
            if hasattr(self, "client_credit_card")
            else None
        )
        _client_indexes=(
            self.client_indexes
            if hasattr(self, "client_indexes")
            else None
        )
        _client_relationships=(
            self.client_relationships
            if hasattr(self, "client_relationships")
            else None
        )
        _first_appointment_date=(
            self.first_appointment_date
            if hasattr(self, "first_appointment_date")
            else None
        )
        _first_class_date=(
            self.first_class_date
            if hasattr(self, "first_class_date")
            else None
        )
        _first_name=(
            self.first_name
            if hasattr(self, "first_name")
            else None
        )
        _id=(
            self.id
            if hasattr(self, "id")
            else None
        )
        _is_company=(
            self.is_company
            if hasattr(self, "is_company")
            else None
        )
        _is_prospect=(
            self.is_prospect
            if hasattr(self, "is_prospect")
            else None
        )
        _last_name=(
            self.last_name
            if hasattr(self, "last_name")
            else None
        )
        _liability=(
            self.liability
            if hasattr(self, "liability")
            else None
        )
        _liability_release=(
            self.liability_release
            if hasattr(self, "liability_release")
            else None
        )
        _membership_icon=(
            self.membership_icon
            if hasattr(self, "membership_icon")
            else None
        )
        _mobile_provider=(
            self.mobile_provider
            if hasattr(self, "mobile_provider")
            else None
        )
        _notes=(
            self.notes
            if hasattr(self, "notes")
            else None
        )
        _state=(
            self.state
            if hasattr(self, "state")
            else None
        )
        _unique_id=(
            self.unique_id
            if hasattr(self, "unique_id")
            else None
        )
        _last_modified_date_time=(
            self.last_modified_date_time
            if hasattr(self, "last_modified_date_time")
            else None
        )
        _red_alert=(
            self.red_alert
            if hasattr(self, "red_alert")
            else None
        )
        _yellow_alert=(
            self.yellow_alert
            if hasattr(self, "yellow_alert")
            else None
        )
        _middle_name=(
            self.middle_name
            if hasattr(self, "middle_name")
            else None
        )
        _prospect_stage=(
            self.prospect_stage
            if hasattr(self, "prospect_stage")
            else None
        )
        _email=(
            self.email
            if hasattr(self, "email")
            else None
        )
        _mobile_phone=(
            self.mobile_phone
            if hasattr(self, "mobile_phone")
            else None
        )
        _home_phone=(
            self.home_phone
            if hasattr(self, "home_phone")
            else None
        )
        _work_phone=(
            self.work_phone
            if hasattr(self, "work_phone")
            else None
        )
        _account_balance=(
            self.account_balance
            if hasattr(self, "account_balance")
            else None
        )
        _address_line_1=(
            self.address_line_1
            if hasattr(self, "address_line_1")
            else None
        )
        _address_line_2=(
            self.address_line_2
            if hasattr(self, "address_line_2")
            else None
        )
        _city=(
            self.city
            if hasattr(self, "city")
            else None
        )
        _postal_code=(
            self.postal_code
            if hasattr(self, "postal_code")
            else None
        )
        _work_extension=(
            self.work_extension
            if hasattr(self, "work_extension")
            else None
        )
        _referred_by=(
            self.referred_by
            if hasattr(self, "referred_by")
            else None
        )
        _photo_url=(
            self.photo_url
            if hasattr(self, "photo_url")
            else None
        )
        _emergency_contact_info_name=(
            self.emergency_contact_info_name
            if hasattr(self, "emergency_contact_info_name")
            else None
        )
        _emergency_contact_info_email=(
            self.emergency_contact_info_email
            if hasattr(self, "emergency_contact_info_email")
            else None
        )
        _emergency_contact_info_phone=(
            self.emergency_contact_info_phone
            if hasattr(self, "emergency_contact_info_phone")
            else None
        )
        _emergency_contact_info_relationship=(
            self.emergency_contact_info_relationship
            if hasattr(self, "emergency_contact_info_relationship")
            else None
        )
        _gender=(
            self.gender
            if hasattr(self, "gender")
            else None
        )
        _last_formula_notes=(
            self.last_formula_notes
            if hasattr(self, "last_formula_notes")
            else None
        )
        _active=(
            self.active
            if hasattr(self, "active")
            else None
        )
        _sales_reps=(
            self.sales_reps
            if hasattr(self, "sales_reps")
            else None
        )
        _status=(
            self.status
            if hasattr(self, "status")
            else None
        )
        _action=(
            self.action
            if hasattr(self, "action")
            else None
        )
        _send_account_emails=(
            self.send_account_emails
            if hasattr(self, "send_account_emails")
            else None
        )
        _send_account_texts=(
            self.send_account_texts
            if hasattr(self, "send_account_texts")
            else None
        )
        _send_promotional_emails=(
            self.send_promotional_emails
            if hasattr(self, "send_promotional_emails")
            else None
        )
        _send_promotional_texts=(
            self.send_promotional_texts
            if hasattr(self, "send_promotional_texts")
            else None
        )
        _send_schedule_emails=(
            self.send_schedule_emails
            if hasattr(self, "send_schedule_emails")
            else None
        )
        _send_schedule_texts=(
            self.send_schedule_texts
            if hasattr(self, "send_schedule_texts")
            else None
        )
        _home_location=(
            self.home_location
            if hasattr(self, "home_location")
            else None
        )
        _locker_number=(
            self.locker_number
            if hasattr(self, "locker_number")
            else None
        )
        return (
            f"{self.__class__.__name__}("
            f"suspension_info={_suspension_info!r}, "
            f"appointment_gender_preference={_appointment_gender_preference!r}, "
            f"birth_date={_birth_date!r}, "
            f"country={_country!r}, "
            f"creation_date={_creation_date!r}, "
            f"custom_client_fields={_custom_client_fields!r}, "
            f"client_credit_card={_client_credit_card!r}, "
            f"client_indexes={_client_indexes!r}, "
            f"client_relationships={_client_relationships!r}, "
            f"first_appointment_date={_first_appointment_date!r}, "
            f"first_class_date={_first_class_date!r}, "
            f"first_name={_first_name!r}, "
            f"id={_id!r}, "
            f"is_company={_is_company!r}, "
            f"is_prospect={_is_prospect!r}, "
            f"last_name={_last_name!r}, "
            f"liability={_liability!r}, "
            f"liability_release={_liability_release!r}, "
            f"membership_icon={_membership_icon!r}, "
            f"mobile_provider={_mobile_provider!r}, "
            f"notes={_notes!r}, "
            f"state={_state!r}, "
            f"unique_id={_unique_id!r}, "
            f"last_modified_date_time={_last_modified_date_time!r}, "
            f"red_alert={_red_alert!r}, "
            f"yellow_alert={_yellow_alert!r}, "
            f"middle_name={_middle_name!r}, "
            f"prospect_stage={_prospect_stage!r}, "
            f"email={_email!r}, "
            f"mobile_phone={_mobile_phone!r}, "
            f"home_phone={_home_phone!r}, "
            f"work_phone={_work_phone!r}, "
            f"account_balance={_account_balance!r}, "
            f"address_line_1={_address_line_1!r}, "
            f"address_line_2={_address_line_2!r}, "
            f"city={_city!r}, "
            f"postal_code={_postal_code!r}, "
            f"work_extension={_work_extension!r}, "
            f"referred_by={_referred_by!r}, "
            f"photo_url={_photo_url!r}, "
            f"emergency_contact_info_name={_emergency_contact_info_name!r}, "
            f"emergency_contact_info_email={_emergency_contact_info_email!r}, "
            f"emergency_contact_info_phone={_emergency_contact_info_phone!r}, "
            f"emergency_contact_info_relationship={_emergency_contact_info_relationship!r}, "
            f"gender={_gender!r}, "
            f"last_formula_notes={_last_formula_notes!r}, "
            f"active={_active!r}, "
            f"sales_reps={_sales_reps!r}, "
            f"status={_status!r}, "
            f"action={_action!r}, "
            f"send_account_emails={_send_account_emails!r}, "
            f"send_account_texts={_send_account_texts!r}, "
            f"send_promotional_emails={_send_promotional_emails!r}, "
            f"send_promotional_texts={_send_promotional_texts!r}, "
            f"send_schedule_emails={_send_schedule_emails!r}, "
            f"send_schedule_texts={_send_schedule_texts!r}, "
            f"home_location={_home_location!r}, "
            f"locker_number={_locker_number!r}, "
            f")"
        )

    def __str__(self):
        """Return a human-readable string representation."""
        _suspension_info=(
            self.suspension_info
            if hasattr(self, "suspension_info")
            else None
        )
        _appointment_gender_preference=(
            self.appointment_gender_preference
            if hasattr(self, "appointment_gender_preference")
            else None
        )
        _birth_date=(
            self.birth_date
            if hasattr(self, "birth_date")
            else None
        )
        _country=(
            self.country
            if hasattr(self, "country")
            else None
        )
        _creation_date=(
            self.creation_date
            if hasattr(self, "creation_date")
            else None
        )
        _custom_client_fields=(
            self.custom_client_fields
            if hasattr(self, "custom_client_fields")
            else None
        )
        _client_credit_card=(
            self.client_credit_card
            if hasattr(self, "client_credit_card")
            else None
        )
        _client_indexes=(
            self.client_indexes
            if hasattr(self, "client_indexes")
            else None
        )
        _client_relationships=(
            self.client_relationships
            if hasattr(self, "client_relationships")
            else None
        )
        _first_appointment_date=(
            self.first_appointment_date
            if hasattr(self, "first_appointment_date")
            else None
        )
        _first_class_date=(
            self.first_class_date
            if hasattr(self, "first_class_date")
            else None
        )
        _first_name=(
            self.first_name
            if hasattr(self, "first_name")
            else None
        )
        _id=(
            self.id
            if hasattr(self, "id")
            else None
        )
        _is_company=(
            self.is_company
            if hasattr(self, "is_company")
            else None
        )
        _is_prospect=(
            self.is_prospect
            if hasattr(self, "is_prospect")
            else None
        )
        _last_name=(
            self.last_name
            if hasattr(self, "last_name")
            else None
        )
        _liability=(
            self.liability
            if hasattr(self, "liability")
            else None
        )
        _liability_release=(
            self.liability_release
            if hasattr(self, "liability_release")
            else None
        )
        _membership_icon=(
            self.membership_icon
            if hasattr(self, "membership_icon")
            else None
        )
        _mobile_provider=(
            self.mobile_provider
            if hasattr(self, "mobile_provider")
            else None
        )
        _notes=(
            self.notes
            if hasattr(self, "notes")
            else None
        )
        _state=(
            self.state
            if hasattr(self, "state")
            else None
        )
        _unique_id=(
            self.unique_id
            if hasattr(self, "unique_id")
            else None
        )
        _last_modified_date_time=(
            self.last_modified_date_time
            if hasattr(self, "last_modified_date_time")
            else None
        )
        _red_alert=(
            self.red_alert
            if hasattr(self, "red_alert")
            else None
        )
        _yellow_alert=(
            self.yellow_alert
            if hasattr(self, "yellow_alert")
            else None
        )
        _middle_name=(
            self.middle_name
            if hasattr(self, "middle_name")
            else None
        )
        _prospect_stage=(
            self.prospect_stage
            if hasattr(self, "prospect_stage")
            else None
        )
        _email=(
            self.email
            if hasattr(self, "email")
            else None
        )
        _mobile_phone=(
            self.mobile_phone
            if hasattr(self, "mobile_phone")
            else None
        )
        _home_phone=(
            self.home_phone
            if hasattr(self, "home_phone")
            else None
        )
        _work_phone=(
            self.work_phone
            if hasattr(self, "work_phone")
            else None
        )
        _account_balance=(
            self.account_balance
            if hasattr(self, "account_balance")
            else None
        )
        _address_line_1=(
            self.address_line_1
            if hasattr(self, "address_line_1")
            else None
        )
        _address_line_2=(
            self.address_line_2
            if hasattr(self, "address_line_2")
            else None
        )
        _city=(
            self.city
            if hasattr(self, "city")
            else None
        )
        _postal_code=(
            self.postal_code
            if hasattr(self, "postal_code")
            else None
        )
        _work_extension=(
            self.work_extension
            if hasattr(self, "work_extension")
            else None
        )
        _referred_by=(
            self.referred_by
            if hasattr(self, "referred_by")
            else None
        )
        _photo_url=(
            self.photo_url
            if hasattr(self, "photo_url")
            else None
        )
        _emergency_contact_info_name=(
            self.emergency_contact_info_name
            if hasattr(self, "emergency_contact_info_name")
            else None
        )
        _emergency_contact_info_email=(
            self.emergency_contact_info_email
            if hasattr(self, "emergency_contact_info_email")
            else None
        )
        _emergency_contact_info_phone=(
            self.emergency_contact_info_phone
            if hasattr(self, "emergency_contact_info_phone")
            else None
        )
        _emergency_contact_info_relationship=(
            self.emergency_contact_info_relationship
            if hasattr(self, "emergency_contact_info_relationship")
            else None
        )
        _gender=(
            self.gender
            if hasattr(self, "gender")
            else None
        )
        _last_formula_notes=(
            self.last_formula_notes
            if hasattr(self, "last_formula_notes")
            else None
        )
        _active=(
            self.active
            if hasattr(self, "active")
            else None
        )
        _sales_reps=(
            self.sales_reps
            if hasattr(self, "sales_reps")
            else None
        )
        _status=(
            self.status
            if hasattr(self, "status")
            else None
        )
        _action=(
            self.action
            if hasattr(self, "action")
            else None
        )
        _send_account_emails=(
            self.send_account_emails
            if hasattr(self, "send_account_emails")
            else None
        )
        _send_account_texts=(
            self.send_account_texts
            if hasattr(self, "send_account_texts")
            else None
        )
        _send_promotional_emails=(
            self.send_promotional_emails
            if hasattr(self, "send_promotional_emails")
            else None
        )
        _send_promotional_texts=(
            self.send_promotional_texts
            if hasattr(self, "send_promotional_texts")
            else None
        )
        _send_schedule_emails=(
            self.send_schedule_emails
            if hasattr(self, "send_schedule_emails")
            else None
        )
        _send_schedule_texts=(
            self.send_schedule_texts
            if hasattr(self, "send_schedule_texts")
            else None
        )
        _home_location=(
            self.home_location
            if hasattr(self, "home_location")
            else None
        )
        _locker_number=(
            self.locker_number
            if hasattr(self, "locker_number")
            else None
        )
        return (
            f"{self.__class__.__name__}("
            f"suspension_info={_suspension_info!s}, "
            f"appointment_gender_preference={_appointment_gender_preference!s}, "
            f"birth_date={_birth_date!s}, "
            f"country={_country!s}, "
            f"creation_date={_creation_date!s}, "
            f"custom_client_fields={_custom_client_fields!s}, "
            f"client_credit_card={_client_credit_card!s}, "
            f"client_indexes={_client_indexes!s}, "
            f"client_relationships={_client_relationships!s}, "
            f"first_appointment_date={_first_appointment_date!s}, "
            f"first_class_date={_first_class_date!s}, "
            f"first_name={_first_name!s}, "
            f"id={_id!s}, "
            f"is_company={_is_company!s}, "
            f"is_prospect={_is_prospect!s}, "
            f"last_name={_last_name!s}, "
            f"liability={_liability!s}, "
            f"liability_release={_liability_release!s}, "
            f"membership_icon={_membership_icon!s}, "
            f"mobile_provider={_mobile_provider!s}, "
            f"notes={_notes!s}, "
            f"state={_state!s}, "
            f"unique_id={_unique_id!s}, "
            f"last_modified_date_time={_last_modified_date_time!s}, "
            f"red_alert={_red_alert!s}, "
            f"yellow_alert={_yellow_alert!s}, "
            f"middle_name={_middle_name!s}, "
            f"prospect_stage={_prospect_stage!s}, "
            f"email={_email!s}, "
            f"mobile_phone={_mobile_phone!s}, "
            f"home_phone={_home_phone!s}, "
            f"work_phone={_work_phone!s}, "
            f"account_balance={_account_balance!s}, "
            f"address_line_1={_address_line_1!s}, "
            f"address_line_2={_address_line_2!s}, "
            f"city={_city!s}, "
            f"postal_code={_postal_code!s}, "
            f"work_extension={_work_extension!s}, "
            f"referred_by={_referred_by!s}, "
            f"photo_url={_photo_url!s}, "
            f"emergency_contact_info_name={_emergency_contact_info_name!s}, "
            f"emergency_contact_info_email={_emergency_contact_info_email!s}, "
            f"emergency_contact_info_phone={_emergency_contact_info_phone!s}, "
            f"emergency_contact_info_relationship={_emergency_contact_info_relationship!s}, "
            f"gender={_gender!s}, "
            f"last_formula_notes={_last_formula_notes!s}, "
            f"active={_active!s}, "
            f"sales_reps={_sales_reps!s}, "
            f"status={_status!s}, "
            f"action={_action!s}, "
            f"send_account_emails={_send_account_emails!s}, "
            f"send_account_texts={_send_account_texts!s}, "
            f"send_promotional_emails={_send_promotional_emails!s}, "
            f"send_promotional_texts={_send_promotional_texts!s}, "
            f"send_schedule_emails={_send_schedule_emails!s}, "
            f"send_schedule_texts={_send_schedule_texts!s}, "
            f"home_location={_home_location!s}, "
            f"locker_number={_locker_number!s}, "
            f")"
        )
