import graphene from graphene import InputObjectType class CustomerCreateInput(InputObjectType): """ Input type for creating a new customer. """ name = graphene.String(required=True, description="Name of the customer") # Primary contact fields primary_contact_first_name = graphene.String(required=True, description="First name of primary contact") primary_contact_last_name = graphene.String(required=True, description="Last name of primary contact") primary_contact_phone = graphene.String(required=True, description="Phone number of primary contact") primary_contact_email = graphene.String(required=True, description="Email of primary contact") # Secondary contact fields (optional) secondary_contact_first_name = graphene.String(description="First name of secondary contact") secondary_contact_last_name = graphene.String(description="Last name of secondary contact") secondary_contact_phone = graphene.String(description="Phone number of secondary contact") secondary_contact_email = graphene.String(description="Email of secondary contact") # Billing information billing_contact_first_name = graphene.String(required=True, description="First name of billing contact") billing_contact_last_name = graphene.String(required=True, description="Last name of billing contact") billing_street_address = graphene.String(required=True, description="Billing street address") billing_city = graphene.String(required=True, description="Billing city") billing_state = graphene.String(required=True, description="Billing state") billing_zip_code = graphene.String(required=True, description="Billing ZIP code") billing_email = graphene.String(required=True, description="Billing email") billing_terms = graphene.String(required=True, description="Billing terms") # Date fields start_date = graphene.DateTime(required=True, description="Start date of the customer relationship (YYYY-MM-DD)") end_date = graphene.DateTime(description="End date of the customer relationship (YYYY-MM-DD)") class CustomerUpdateInput(InputObjectType): """ Input type for updating an existing customer. """ name = graphene.String(description="Name of the customer") # Primary contact fields primary_contact_first_name = graphene.String(description="First name of primary contact") primary_contact_last_name = graphene.String(description="Last name of primary contact") primary_contact_phone = graphene.String(description="Phone number of primary contact") primary_contact_email = graphene.String(description="Email of primary contact") # Secondary contact fields secondary_contact_first_name = graphene.String(description="First name of secondary contact") secondary_contact_last_name = graphene.String(description="Last name of secondary contact") secondary_contact_phone = graphene.String(description="Phone number of secondary contact") secondary_contact_email = graphene.String(description="Email of secondary contact") # Billing information billing_contact_first_name = graphene.String(description="First name of billing contact") billing_contact_last_name = graphene.String(description="Last name of billing contact") billing_street_address = graphene.String(description="Billing street address") billing_city = graphene.String(description="Billing city") billing_state = graphene.String(description="Billing state") billing_zip_code = graphene.String(description="Billing ZIP code") billing_email = graphene.String(description="Billing email") billing_terms = graphene.String(description="Billing terms") # Date fields start_date = graphene.DateTime(description="Start date of the customer relationship (YYYY-MM-DD)") end_date = graphene.DateTime(description="End date of the customer relationship (YYYY-MM-DD)") class CustomerFilterInput(InputObjectType): """ Input type for filtering customers. """ id = graphene.ID(description="Filter by customer ID") name = graphene.String(description="Filter by customer name (partial match)") is_active = graphene.Boolean(description="Filter by active status") has_accounts = graphene.Boolean(description="Filter by whether the customer has accounts") start_date_after = graphene.String(description="Filter by start date after (YYYY-MM-DD)") start_date_before = graphene.String(description="Filter by start date before (YYYY-MM-DD)") billing_city = graphene.String(description="Filter by billing city") billing_state = graphene.String(description="Filter by billing state") billing_zip_code = graphene.String(description="Filter by billing ZIP code") primary_contact_email = graphene.String(description="Filter by primary contact email (partial match)") billing_email = graphene.String(description="Filter by billing email (partial match)")