Source code for ABConnect.api.models.contacts
"""Contacts models for ABConnect API."""
from typing import List, Optional, TYPE_CHECKING
from datetime import datetime
from pydantic import Field
from .base import ABConnectBaseModel, CompanyRelatedModel, IdentifiedModel, TimestampedModel
from .enums import ListSortDirection
# Runtime imports for forward reference resolution (avoid circular imports with deferred import)
from .address import Address, AddressDetails, FreightRateRequestAddressDetails
from .shared import PhoneDetails, EmailDetails, PageOrderedRequestModel, AutoCompleteValue
from .users import Users
from .companies import Company, ContactDetailsCompanyInfo
[docs]
class BaseContactDetails(CompanyRelatedModel):
"""BaseContactDetails model"""
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
contact_name: Optional[str] = Field(None, alias="contactName")
job_title: Optional[str] = Field(None, alias="jobTitle")
co_name: Optional[str] = Field(None, alias="coName")
bol_note: Optional[str] = Field(None, alias="bolNote")
contact_tax_id: Optional[str] = Field(None, alias="contactTaxId")
company_display_id: Optional[str] = Field(None, alias="companyDisplayId")
company_type: Optional[str] = Field(None, alias="companyType")
company_inductry: Optional[str] = Field(None, alias="companyInductry")
company_tax_id: Optional[str] = Field(None, alias="companyTaxId")
company_payer_name: Optional[str] = Field(None, alias="companyPayerName")
company_address1: Optional[str] = Field(None, alias="companyAddress1")
company_address2: Optional[str] = Field(None, alias="companyAddress2")
company_city: Optional[str] = Field(None, alias="companyCity")
company_state: Optional[str] = Field(None, alias="companyState")
company_country: Optional[str] = Field(None, alias="companyCountry")
company_zip_code: Optional[str] = Field(None, alias="companyZipCode")
company_latitude: Optional[float] = Field(None, alias="companyLatitude")
company_longitude: Optional[float] = Field(None, alias="companyLongitude")
[docs]
class CalendarContact(IdentifiedModel):
"""CalendarContact model"""
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
company_id: Optional[str] = Field(None, alias="companyId")
company_name: Optional[str] = Field(None, alias="companyName")
bol_notes: Optional[str] = Field(None, alias="bolNotes")
full_name: Optional[str] = Field(None, alias="fullName")
[docs]
class Contact(TimestampedModel):
"""Contact model"""
company_id: Optional[str] = Field(None, alias="companyId")
address_id: Optional[str] = Field(None, alias="addressId")
address1: Optional[str] = Field(None)
address2: Optional[str] = Field(None)
city: Optional[str] = Field(None)
state: Optional[str] = Field(None)
state_code: Optional[str] = Field(None, alias="stateCode")
country_name: Optional[str] = Field(None, alias="countryName")
country_code: Optional[str] = Field(None, alias="countryCode")
country_id: Optional[str] = Field(None, alias="countryId")
zip_code: Optional[str] = Field(None, alias="zipCode")
is_active: Optional[bool] = Field(None, alias="isActive")
latitude: Optional[str] = Field(None)
longitude: Optional[str] = Field(None)
result: Optional[str] = Field(None)
address_mapping_id: Optional[str] = Field(None, alias="addressMappingId")
contact_id: Optional[str] = Field(None, alias="contactId")
user_id: Optional[str] = Field(None, alias="userId")
primary_customer_name: Optional[str] = Field(None, alias="primaryCustomerName")
contact_info: Optional["Contact"] = Field(None, alias="contactInfo")
address: Optional[str] = Field(None)
parent_company_id: Optional[str] = Field(None, alias="parentCompanyId")
user_id: Optional[str] = Field(None, alias="userId")
payer_id: Optional[str] = Field(None, alias="payerId")
cust_companyid: Optional[str] = Field(None, alias="custCompanyid")
pu_business_status: Optional[str] = Field(None, alias="puBusinessStatus")
del_business_status: Optional[str] = Field(None, alias="delBusinessStatus")
pu_zone: Optional[float] = Field(None, alias="puZone")
new_contact_id: Optional[int] = Field(None, alias="newContactId")
contact_is_business: Optional[bool] = Field(None, alias="contactIsBusiness")
contact_first_name: Optional[str] = Field(None, alias="contactFirstName")
contact_last_name: Optional[str] = Field(None, alias="contactLastName")
contact_full_name: Optional[str] = Field(None, alias="contactFullName")
contact_phone: Optional[str] = Field(None, alias="contactPhone")
contact_fax: Optional[str] = Field(None, alias="contactFax")
customer_cell: Optional[str] = Field(None, alias="customerCell")
contact_email_id: Optional[str] = Field(None, alias="contactEmailId")
contact_type_id: Optional[int] = Field(None, alias="contactTypeId")
refer_id: Optional[str] = Field(None, alias="referId")
referred_name: Optional[str] = Field(None, alias="referredName")
contact_dept: Optional[str] = Field(None, alias="contactDept")
contact_assistant: Optional[str] = Field(None, alias="contactAssistant")
contact_assistant_phone: Optional[str] = Field(None, alias="contactAssistantPhone")
contact_home_phone: Optional[str] = Field(None, alias="contactHomePhone")
contact_birth_date: Optional[datetime] = Field(None, alias="contactBirthDate")
is_primary: Optional[bool] = Field(None, alias="isPrimary")
is_prefered: Optional[bool] = Field(None, alias="isPrefered")
referred_by: Optional[str] = Field(None, alias="referredBy")
is_payer: Optional[bool] = Field(None, alias="isPayer")
payer_name: Optional[str] = Field(None, alias="payerName")
other_referral: Optional[str] = Field(None, alias="otherReferral")
master_constant_id: Optional[str] = Field(None, alias="masterConstantId")
company_name: Optional[str] = Field(None, alias="companyName")
parent_company_name: Optional[str] = Field(None, alias="parentCompanyName")
company_code: Optional[str] = Field(None, alias="companyCode")
master_constant_value: Optional[str] = Field(None, alias="masterConstantValue")
total_record: Optional[int] = Field(None, alias="totalRecord")
industry_type: Optional[str] = Field(None, alias="industryType")
contact_address: Optional["Address"] = Field(None, alias="contactAddress")
contact_user: Optional["Users"] = Field(None, alias="contactUser")
total_items: Optional[int] = Field(None, alias="totalItems")
contact_web_site: Optional[str] = Field(None, alias="contactWebSite")
is_global: Optional[bool] = Field(None, alias="isGlobal")
user_name: Optional[str] = Field(None, alias="userName")
is_access: Optional[str] = Field(None, alias="isAccess")
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
company_display_id: Optional[str] = Field(None, alias="companyDisplayId")
franchisee_name: Optional[str] = Field(None, alias="franchiseeName")
contact_type: Optional[str] = Field(None, alias="contactType")
created_user: Optional[str] = Field(None, alias="createdUser")
mapping_locations: Optional[str] = Field(None, alias="mappingLocations")
location_count: Optional[str] = Field(None, alias="locationCount")
base_parent: Optional[str] = Field(None, alias="baseParent")
[docs]
class ContactAddressDetails(IdentifiedModel):
"""ContactAddressDetails model"""
is_active: Optional[bool] = Field(None, alias="isActive")
deactivated_reason: Optional[str] = Field(None, alias="deactivatedReason")
meta_data: Optional[str] = Field(None, alias="metaData")
address: Optional["AddressDetails"] = Field(None)
[docs]
class ContactAddressEditDetails(ContactAddressDetails):
"""ContactAddressEditDetails model - extends ContactAddressDetails with edit metadata."""
editable: Optional[bool] = Field(None)
detail_hash: Optional[str] = Field(None, alias="detailHash")
[docs]
class ContactDetailedInfo(IdentifiedModel):
"""ContactDetailedInfo model"""
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
full_name: Optional[str] = Field(None, alias="fullName")
contact_type_id: Optional[int] = Field(None, alias="contactTypeId")
care_of: Optional[str] = Field(None, alias="careOf")
bol_notes: Optional[str] = Field(None, alias="bolNotes")
tax_id: Optional[str] = Field(None, alias="taxId")
is_business: Optional[bool] = Field(None, alias="isBusiness")
is_payer: Optional[bool] = Field(None, alias="isPayer")
is_prefered: Optional[bool] = Field(None, alias="isPrefered")
is_private: Optional[bool] = Field(None, alias="isPrivate")
is_active: Optional[bool] = Field(None, alias="isActive")
company_id: Optional[str] = Field(None, alias="companyId")
root_contact_id: Optional[int] = Field(None, alias="rootContactId")
owner_franchisee_id: Optional[str] = Field(None, alias="ownerFranchiseeId")
company: Optional["Company"] = Field(None)
legacy_guid: Optional[str] = Field(None, alias="legacyGuid")
is_primary: Optional[bool] = Field(None, alias="isPrimary")
assistant: Optional[str] = Field(None)
department: Optional[str] = Field(None)
web_site: Optional[str] = Field(None, alias="webSite")
birth_date: Optional[datetime] = Field(None, alias="birthDate")
job_title_id: Optional[int] = Field(None, alias="jobTitleId")
job_title: Optional[str] = Field(None, alias="jobTitle")
emails_list: Optional[List["ContactEmailEditDetails"]] = Field(None, alias="emailsList")
phones_list: Optional[List["ContactPhoneEditDetails"]] = Field(None, alias="phonesList")
addresses_list: Optional[List[ContactAddressEditDetails]] = Field(None, alias="addressesList")
fax: Optional[str] = Field(None)
primary_phone_detail: Optional["PhoneDetails"] = Field(None, alias="primaryPhoneDetail")
primary_phone: Optional[str] = Field(None, alias="primaryPhone")
primary_email_detail: Optional["EmailDetails"] = Field(None, alias="primaryEmailDetail")
primary_email: Optional[str] = Field(None, alias="primaryEmail")
primary_address_detail: Optional["AddressDetails"] = Field(None, alias="primaryAddressDetail")
editable: Optional[bool] = Field(None)
contact_details_company_info: Optional["ContactDetailsCompanyInfo"] = Field(None, alias="contactDetailsCompanyInfo")
[docs]
class ContactDetails(IdentifiedModel):
"""ContactDetails model"""
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
full_name: Optional[str] = Field(None, alias="fullName")
contact_type_id: Optional[int] = Field(None, alias="contactTypeId")
care_of: Optional[str] = Field(None, alias="careOf")
bol_notes: Optional[str] = Field(None, alias="bolNotes")
tax_id: Optional[str] = Field(None, alias="taxId")
is_business: Optional[bool] = Field(None, alias="isBusiness")
is_payer: Optional[bool] = Field(None, alias="isPayer")
is_prefered: Optional[bool] = Field(None, alias="isPrefered")
is_private: Optional[bool] = Field(None, alias="isPrivate")
is_active: Optional[bool] = Field(None, alias="isActive")
company_id: Optional[str] = Field(None, alias="companyId")
root_contact_id: Optional[int] = Field(None, alias="rootContactId")
owner_franchisee_id: Optional[str] = Field(None, alias="ownerFranchiseeId")
company: Optional["Company"] = Field(None)
legacy_guid: Optional[str] = Field(None, alias="legacyGuid")
is_primary: Optional[bool] = Field(None, alias="isPrimary")
assistant: Optional[str] = Field(None)
department: Optional[str] = Field(None)
web_site: Optional[str] = Field(None, alias="webSite")
birth_date: Optional[datetime] = Field(None, alias="birthDate")
job_title_id: Optional[int] = Field(None, alias="jobTitleId")
job_title: Optional[str] = Field(None, alias="jobTitle")
emails_list: Optional[List["ContactEmailDetails"]] = Field(None, alias="emailsList")
phones_list: Optional[List["ContactPhoneDetails"]] = Field(None, alias="phonesList")
addresses_list: Optional[List["ContactAddressDetails"]] = Field(None, alias="addressesList")
fax: Optional[str] = Field(None)
primary_phone_detail: Optional["PhoneDetails"] = Field(None, alias="primaryPhoneDetail")
primary_phone: Optional[str] = Field(None, alias="primaryPhone")
primary_email_detail: Optional["EmailDetails"] = Field(None, alias="primaryEmailDetail")
primary_email: Optional[str] = Field(None, alias="primaryEmail")
primary_address_detail: Optional["AddressDetails"] = Field(None, alias="primaryAddressDetail")
editable: Optional[bool] = Field(None)
is_empty: Optional[bool] = Field(None, alias="isEmpty")
full_name_update_required: Optional[bool] = Field(None, alias="fullNameUpdateRequired")
[docs]
class ContactEmailDetails(IdentifiedModel):
"""ContactEmailDetails model"""
is_active: Optional[bool] = Field(None, alias="isActive")
deactivated_reason: Optional[str] = Field(None, alias="deactivatedReason")
meta_data: Optional[str] = Field(None, alias="metaData")
email: Optional["EmailDetails"] = Field(None)
[docs]
class ContactEmailEditDetails(ContactEmailDetails):
"""ContactEmailEditDetails model - extends ContactEmailDetails with edit metadata."""
editable: Optional[bool] = Field(None)
detail_hash: Optional[str] = Field(None, alias="detailHash")
[docs]
class ContactHistoryPricePerPound(ABConnectBaseModel):
"""ContactHistoryPricePerPound model"""
weight: Optional[float] = Field(None)
amount: Optional[float] = Field(None)
job_type: Optional[int] = Field(None, alias="jobType")
booked_or_completed: Optional[bool] = Field(None, alias="bookedOrCompleted")
[docs]
class ContactHistoryRevenueSum(TimestampedModel):
"""ContactHistoryRevenueSum model"""
created_date_str_internal: Optional[str] = Field(None, alias="createdDateStrInternal")
booked_completed_revenue: Optional[float] = Field(None, alias="bookedCompletedRevenue")
quoted_estimate_revenue: Optional[float] = Field(None, alias="quotedEstimateRevenue")
booked_completed_job_count: Optional[int] = Field(None, alias="bookedCompletedJobCount")
quoted_estimate_job_count: Optional[int] = Field(None, alias="quotedEstimateJobCount")
[docs]
class ContactPhoneDetails(IdentifiedModel):
"""ContactPhoneDetails model"""
is_active: Optional[bool] = Field(None, alias="isActive")
deactivated_reason: Optional[str] = Field(None, alias="deactivatedReason")
meta_data: Optional[str] = Field(None, alias="metaData")
phone: Optional["PhoneDetails"] = Field(None)
[docs]
class ContactPhoneEditDetails(ContactPhoneDetails):
"""ContactPhoneEditDetails model - extends ContactPhoneDetails with edit metadata."""
editable: Optional[bool] = Field(None)
detail_hash: Optional[str] = Field(None, alias="detailHash")
[docs]
class ContactPrimaryDetails(CompanyRelatedModel):
"""ContactPrimaryDetails model"""
full_name: Optional[str] = Field(None, alias="fullName")
email: Optional[str] = Field(None)
phone: Optional[str] = Field(None)
cell_phone: Optional[str] = Field(None, alias="cellPhone")
fax: Optional[str] = Field(None)
address: Optional["AddressDetails"] = Field(None)
company: Optional["Company"] = Field(None)
[docs]
class MergeContactsSearchRequestModel(ABConnectBaseModel):
"""MergeContactsSearchRequestModel model"""
main_search_request: "MergeContactsSearchRequestParameters" = Field(..., alias="mainSearchRequest")
load_options: "PageOrderedRequestModel" = Field(..., alias="loadOptions")
[docs]
class MergeContactsSearchRequestParameters(CompanyRelatedModel):
"""MergeContactsSearchRequestParameters model"""
contact_display_id: Optional[int] = Field(None, alias="contactDisplayId")
full_name: Optional[str] = Field(None, alias="fullName")
company_code: Optional[str] = Field(None, alias="companyCode")
email: Optional[str] = Field(None)
phone: Optional[str] = Field(None)
company_display_id: Optional[int] = Field(None, alias="companyDisplayId")
[docs]
class PlannerContact(IdentifiedModel):
"""PlannerContact model"""
full_name: Optional[str] = Field(None, alias="fullName")
company_name: Optional[str] = Field(None, alias="companyName")
[docs]
class SearchContactEntityResult(CompanyRelatedModel):
"""SearchContactEntityResult model"""
contact_id: Optional[int] = Field(None, alias="contactId")
customer_cell: Optional[str] = Field(None, alias="customerCell")
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
contact_full_name: Optional[str] = Field(None, alias="contactFullName")
contact_phone: Optional[str] = Field(None, alias="contactPhone")
contact_home_phone: Optional[str] = Field(None, alias="contactHomePhone")
contact_email: Optional[str] = Field(None, alias="contactEmail")
master_constant_value: Optional[str] = Field(None, alias="masterConstantValue")
contact_dept: Optional[str] = Field(None, alias="contactDept")
address1: Optional[str] = Field(None)
address2: Optional[str] = Field(None)
city: Optional[str] = Field(None)
state: Optional[str] = Field(None)
zip_code: Optional[str] = Field(None, alias="zipCode")
country_name: Optional[str] = Field(None, alias="countryName")
company_code: Optional[str] = Field(None, alias="companyCode")
company_display_id: Optional[str] = Field(None, alias="companyDisplayId")
is_prefered: Optional[bool] = Field(None, alias="isPrefered")
industry_type: Optional[str] = Field(None, alias="industryType")
total_records: Optional[int] = Field(None, alias="totalRecords")
[docs]
class SearchContactRequest(CompanyRelatedModel):
"""SearchContactRequest model"""
page_index: Optional[int] = Field(None, alias="pageIndex")
page_size: Optional[int] = Field(None, alias="pageSize")
total_count: Optional[int] = Field(None, alias="totalCount")
sorting_by: Optional[str] = Field(None, alias="sortingBy")
sorting_direction: Optional[ListSortDirection] = Field(None, alias="sortingDirection")
full_name: Optional[str] = Field(None, alias="fullName")
company_display_id: Optional[str] = Field(None, alias="companyDisplayId")
contact_display_id: Optional[str] = Field(None, alias="contactDisplayId")
company_code: Optional[str] = Field(None, alias="companyCode")
email: Optional[str] = Field(None)
phone: Optional[str] = Field(None)
city: Optional[str] = Field(None)
state: Optional[str] = Field(None)
zip_code: Optional[str] = Field(None, alias="zipCode")
user_id: Optional[str] = Field(None, alias="userId")
type: Optional[str] = Field(None)
[docs]
class ShipmentContactAddressDetails(CompanyRelatedModel):
"""ShipmentContactAddressDetails model"""
contact_name: Optional[str] = Field(None, alias="contactName")
phone_number: Optional[str] = Field(None, alias="phoneNumber")
email_address: Optional[str] = Field(None, alias="emailAddress")
address: Optional["AddressDetails"] = Field(None)
tax_ids: Optional[List["AutoCompleteValue"]] = Field(None, alias="taxIds")
[docs]
class ShipmentContactDetails(CompanyRelatedModel):
"""ShipmentContactDetails model"""
contact_name: Optional[str] = Field(None, alias="contactName")
phone_number: Optional[str] = Field(None, alias="phoneNumber")
email_address: Optional[str] = Field(None, alias="emailAddress")
tax_id: Optional[str] = Field(None, alias="taxId")
address: Optional["FreightRateRequestAddressDetails"] = Field(None)
is_empty: Optional[bool] = Field(None, alias="isEmpty")
[docs]
class ContactUser(ABConnectBaseModel):
"""ContactUser model for GET /contacts/user response."""
full_name: Optional[str] = Field(None, alias="fullName")
company_id: Optional[str] = Field(None, alias="companyId")
company_name: Optional[str] = Field(None, alias="companyName")
__all__ = ['BaseContactDetails', 'CalendarContact', 'Contact', 'ContactAddressDetails', 'ContactAddressEditDetails', 'ContactDetailedInfo', 'ContactDetails', 'ContactEmailDetails', 'ContactEmailEditDetails', 'ContactHistoryPricePerPound', 'ContactHistoryRevenueSum', 'ContactPhoneDetails', 'ContactPhoneEditDetails', 'ContactPrimaryDetails', 'ContactUser', 'MergeContactsSearchRequestModel', 'MergeContactsSearchRequestParameters', 'PlannerContact', 'SearchContactEntityResult', 'SearchContactRequest', 'ShipmentContactAddressDetails', 'ShipmentContactDetails']
# Rebuild models to resolve forward references within this module
Contact.model_rebuild()
ContactDetailedInfo.model_rebuild()
ContactDetails.model_rebuild()
ContactPrimaryDetails.model_rebuild()
ShipmentContactAddressDetails.model_rebuild()
ShipmentContactDetails.model_rebuild()