import graphene from graphene import InputObjectType class PunchlistCreateInput(InputObjectType): """ Input type for creating a new Punchlist. """ project_id = graphene.ID(required=True, description="ID of the project for this punchlist") account_id = graphene.ID(required=True, description="ID of the account for this punchlist") date = graphene.Date(required=True, description="Date of the punchlist (YYYY-MM-DD)") second_visit = graphene.Boolean(description="Whether a second visit is required") second_date = graphene.DateTime(description="Date and time of the second visit") # Front area section front_ceiling = graphene.Boolean(description="Front area ceiling cleaned") front_vents = graphene.Boolean(description="Front area vents cleaned") front_fixtures = graphene.Boolean(description="Front area fixtures cleaned") front_counter = graphene.Boolean(description="Front counter cleaned") # Main work area section main_equipment = graphene.String(description="Main equipment type") main_equipment_disassemble = graphene.Boolean(description="Equipment disassembled") main_equipment_reassemble = graphene.Boolean(description="Equipment reassembled") main_equipment_alerts = graphene.Boolean(description="Equipment alerts identified") main_equipment_exterior = graphene.Boolean(description="Equipment exterior cleaned") main_walls = graphene.Boolean(description="Main area walls cleaned") main_fixtures = graphene.Boolean(description="Main area fixtures cleaned") main_ceiling = graphene.Boolean(description="Main area ceiling cleaned") main_vents = graphene.Boolean(description="Main area vents cleaned") main_floors = graphene.Boolean(description="Main area floors cleaned") # Equipment section equip_primary = graphene.Boolean(description="Primary equipment cleaned") equip_station_1 = graphene.Boolean(description="Station 1 cleaned") equip_station_2 = graphene.Boolean(description="Station 2 cleaned") equip_station_3 = graphene.Boolean(description="Station 3 cleaned") equip_storage = graphene.Boolean(description="Storage area cleaned") equip_prep = graphene.Boolean(description="Prep area cleaned") equip_delivery = graphene.Boolean(description="Delivery area cleaned") equip_office = graphene.Boolean(description="Office area cleaned") equip_sinks = graphene.Boolean(description="Sinks cleaned") equip_dispensers = graphene.Boolean(description="Dispensers cleaned") equip_other = graphene.Boolean(description="Other equipment cleaned") # Back area section back_ceiling = graphene.Boolean(description="Back area ceiling cleaned") back_vents = graphene.Boolean(description="Back area vents cleaned") # End of visit section end_trash = graphene.Boolean(description="Trash removed") end_clean = graphene.Boolean(description="Area left clean") end_secure = graphene.Boolean(description="Area secured") # Notes notes = graphene.String(description="Notes about the punchlist") class PunchlistUpdateInput(InputObjectType): """ Input type for updating an existing Punchlist. """ id = graphene.ID(required=True, description="ID of the punchlist to update") project_id = graphene.ID(description="ID of the project for this punchlist") account_id = graphene.ID(description="ID of the account for this punchlist") date = graphene.Date(description="Date of the punchlist (YYYY-MM-DD)") second_visit = graphene.Boolean(description="Whether a second visit is required") second_date = graphene.DateTime(description="Date and time of the second visit") # Front area section front_ceiling = graphene.Boolean(description="Front area ceiling cleaned") front_vents = graphene.Boolean(description="Front area vents cleaned") front_fixtures = graphene.Boolean(description="Front area fixtures cleaned") front_counter = graphene.Boolean(description="Front counter cleaned") # Main work area section main_equipment = graphene.String(description="Main equipment type") main_equipment_disassemble = graphene.Boolean(description="Equipment disassembled") main_equipment_reassemble = graphene.Boolean(description="Equipment reassembled") main_equipment_alerts = graphene.Boolean(description="Equipment alerts identified") main_equipment_exterior = graphene.Boolean(description="Equipment exterior cleaned") main_walls = graphene.Boolean(description="Main area walls cleaned") main_fixtures = graphene.Boolean(description="Main area fixtures cleaned") main_ceiling = graphene.Boolean(description="Main area ceiling cleaned") main_vents = graphene.Boolean(description="Main area vents cleaned") main_floors = graphene.Boolean(description="Main area floors cleaned") # Equipment section equip_primary = graphene.Boolean(description="Primary equipment cleaned") equip_station_1 = graphene.Boolean(description="Station 1 cleaned") equip_station_2 = graphene.Boolean(description="Station 2 cleaned") equip_station_3 = graphene.Boolean(description="Station 3 cleaned") equip_storage = graphene.Boolean(description="Storage area cleaned") equip_prep = graphene.Boolean(description="Prep area cleaned") equip_delivery = graphene.Boolean(description="Delivery area cleaned") equip_office = graphene.Boolean(description="Office area cleaned") equip_sinks = graphene.Boolean(description="Sinks cleaned") equip_dispensers = graphene.Boolean(description="Dispensers cleaned") equip_other = graphene.Boolean(description="Other equipment cleaned") # Back area section back_ceiling = graphene.Boolean(description="Back area ceiling cleaned") back_vents = graphene.Boolean(description="Back area vents cleaned") # End of visit section end_trash = graphene.Boolean(description="Trash removed") end_clean = graphene.Boolean(description="Area left clean") end_secure = graphene.Boolean(description="Area secured") # Notes notes = graphene.String(description="Notes about the punchlist") # Export fields exported_at = graphene.DateTime(description="When the punchlist was exported") sheet_url = graphene.String(description="URL to the Google Sheet") pdf_url = graphene.String(description="URL to the PDF") class PunchlistFilterInput(InputObjectType): """ Input type for filtering Punchlists. """ project_id = graphene.ID(description="Filter by project ID") account_id = graphene.ID(description="Filter by account ID") start_date = graphene.Date(description="Filter by start date (inclusive)") end_date = graphene.Date(description="Filter by end date (inclusive)") is_exported = graphene.Boolean(description="Filter by export status") second_visit = graphene.Boolean(description="Filter by second visit requirement")