from django.db import models class StatusChoices(models.TextChoices): """Status choices for a Customer, Account, or a future model""" ACTIVE = 'ACTIVE', 'Active' INACTIVE = 'INACTIVE', 'Inactive' PENDING = 'PENDING', 'Pending' class ServiceChoices(models.TextChoices): """Status choices for a service workflow""" SCHEDULED = 'SCHEDULED', 'Scheduled' IN_PROGRESS = 'IN_PROGRESS', 'In Progress' COMPLETED = 'COMPLETED', 'Completed' CANCELLED = 'CANCELLED', 'Cancelled' class AddressChoices(models.TextChoices): """Address choices for a customer""" BILLING = 'BILLING', 'Billing' SHIPPING = 'SHIPPING', 'Shipping' OFFICE = 'OFFICE', 'Office Location' OTHER = 'OTHER', 'Other Address' class InvoiceChoices(models.TextChoices): """Status choices for an invoice""" DRAFT = 'DRAFT', 'Draft' SENT = 'SENT', 'Sent' PAID = 'PAID', 'Paid' OVERDUE = 'OVERDUE', 'Overdue' CANCELLED = 'CANCELLED', 'Cancelled' class PaymentChoices(models.TextChoices): """Payment choices for a transaction""" CHECK = 'CHECK', 'Check' CREDIT_CARD = 'CREDIT_CARD', 'Credit Card' BANK_TRANSFER = 'BANK_TRANSFER', 'Bank Transfer' CASH = 'CASH', 'Cash' class TaskFrequencyChoices(models.TextChoices): DAILY = 'daily', 'Daily' WEEKLY = 'weekly', 'Weekly' MONTHLY = 'monthly', 'Monthly' QUARTERLY = 'quarterly', 'Quarterly' TRIANNUAL = 'triannual', 'Tri-annual' ANNUAL = 'annual', 'Annual' AS_NEEDED = 'as_needed', 'As Needed' class RoleChoices(models.TextChoices): """Role choices for a user""" ADMIN = 'ADMIN', 'Admin' TEAM_LEADER = 'TEAM_LEADER', 'Team Leader' TEAM_MEMBER = 'TEAM_MEMBER', 'Team Member' class EventTypeChoices(models.TextChoices): """Event types for the event management system""" # Customer events CUSTOMER_CREATED = 'CUSTOMER_CREATED', 'Customer Created' CUSTOMER_UPDATED = 'CUSTOMER_UPDATED', 'Customer Updated' CUSTOMER_DELETED = 'CUSTOMER_DELETED', 'Customer Deleted' CUSTOMER_STATUS_CHANGED = 'CUSTOMER_STATUS_CHANGED', 'Customer Status Changed' CUSTOMER_ADDRESS_CREATED = 'CUSTOMER_ADDRESS_CREATED', 'Customer Address Created' CUSTOMER_ADDRESS_UPDATED = 'CUSTOMER_ADDRESS_UPDATED', 'Customer Address Updated' CUSTOMER_ADDRESS_DELETED = 'CUSTOMER_ADDRESS_DELETED', 'Customer Address Deleted' CUSTOMER_CONTACT_CREATED = 'CUSTOMER_CONTACT_CREATED', 'Customer Contact Created' CUSTOMER_CONTACT_UPDATED = 'CUSTOMER_CONTACT_UPDATED', 'Customer Contact Updated' CUSTOMER_CONTACT_DELETED = 'CUSTOMER_CONTACT_DELETED', 'Customer Contact Deleted' # Account events ACCOUNT_CREATED = 'ACCOUNT_CREATED', 'Account Created' ACCOUNT_UPDATED = 'ACCOUNT_UPDATED', 'Account Updated' ACCOUNT_DELETED = 'ACCOUNT_DELETED', 'Account Deleted' ACCOUNT_STATUS_CHANGED = 'ACCOUNT_STATUS_CHANGED', 'Account Status Changed' ACCOUNT_ADDRESS_CREATED = 'ACCOUNT_ADDRESS_CREATED', 'Account Address Created' ACCOUNT_ADDRESS_UPDATED = 'ACCOUNT_ADDRESS_UPDATED', 'Account Address Updated' ACCOUNT_ADDRESS_DELETED = 'ACCOUNT_ADDRESS_DELETED', 'Account Address Deleted' ACCOUNT_CONTACT_CREATED = 'ACCOUNT_CONTACT_CREATED', 'Account Contact Created' ACCOUNT_CONTACT_UPDATED = 'ACCOUNT_CONTACT_UPDATED', 'Account Contact Updated' ACCOUNT_CONTACT_DELETED = 'ACCOUNT_CONTACT_DELETED', 'Account Contact Deleted' # Service events SERVICE_CREATED = 'SERVICE_CREATED', 'Service Created' SERVICE_UPDATED = 'SERVICE_UPDATED', 'Service Updated' SERVICE_DELETED = 'SERVICE_DELETED', 'Service Deleted' SERVICE_STATUS_CHANGED = 'SERVICE_STATUS_CHANGED', 'Service Status Changed' SERVICE_COMPLETED = 'SERVICE_COMPLETED', 'Service Completed' SERVICE_CANCELLED = 'SERVICE_CANCELLED', 'Service Cancelled' SERVICE_TEAM_ASSIGNED = 'SERVICE_TEAM_ASSIGNED', 'Team Assigned to Service' SERVICE_TEAM_UNASSIGNED = 'SERVICE_TEAM_UNASSIGNED', 'Team Unassigned from Service' SERVICE_DISPATCHED = 'SERVICE_DISPATCHED', 'Service Dispatched' SERVICES_BULK_GENERATED = 'SERVICES_BULK_GENERATED', 'Services Bulk Generated' # Service session events SERVICE_SESSION_OPENED = 'SERVICE_SESSION_OPENED', 'Service Session Opened' SERVICE_SESSION_CLOSED = 'SERVICE_SESSION_CLOSED', 'Service Session Closed' SERVICE_SESSION_REVERTED = 'SERVICE_SESSION_REVERTED', 'Service Session Reverted' SERVICE_TASK_COMPLETED = 'SERVICE_TASK_COMPLETED', 'Service Task Completed' SERVICE_TASK_UNCOMPLETED = 'SERVICE_TASK_UNCOMPLETED', 'Service Task Uncompleted' # Schedule events SCHEDULE_CREATED = 'SCHEDULE_CREATED', 'Schedule Created' SCHEDULE_UPDATED = 'SCHEDULE_UPDATED', 'Schedule Updated' SCHEDULE_DELETED = 'SCHEDULE_DELETED', 'Schedule Deleted' SCHEDULE_FREQUENCY_CHANGED = 'SCHEDULE_FREQUENCY_CHANGED', 'Schedule Frequency Changed' # Project events PROJECT_CREATED = 'PROJECT_CREATED', 'Project Created' PROJECT_UPDATED = 'PROJECT_UPDATED', 'Project Updated' PROJECT_STATUS_CHANGED = 'PROJECT_STATUS_CHANGED', 'Project Status Changed' PROJECT_COMPLETED = 'PROJECT_COMPLETED', 'Project Completed' PROJECT_CANCELLED = 'PROJECT_CANCELLED', 'Project Cancelled' PROJECT_DISPATCHED = 'PROJECT_DISPATCHED', 'Project Dispatched' PROJECT_DELETED = 'PROJECT_DELETED', 'Project Deleted' # Project session events PROJECT_SESSION_OPENED = 'PROJECT_SESSION_OPENED', 'Project Session Opened' PROJECT_SESSION_CLOSED = 'PROJECT_SESSION_CLOSED', 'Project Session Closed' PROJECT_SESSION_REVERTED = 'PROJECT_SESSION_REVERTED', 'Project Session Reverted' PROJECT_TASK_COMPLETED = 'PROJECT_TASK_COMPLETED', 'Project Task Completed' PROJECT_TASK_UNCOMPLETED = 'PROJECT_TASK_UNCOMPLETED', 'Project Task Uncompleted' # Project scope events PROJECT_SCOPE_CREATED = 'PROJECT_SCOPE_CREATED', 'Project Scope Created' PROJECT_SCOPE_UPDATED = 'PROJECT_SCOPE_UPDATED', 'Project Scope Updated' PROJECT_SCOPE_DELETED = 'PROJECT_SCOPE_DELETED', 'Project Scope Deleted' PROJECT_SCOPE_CATEGORY_CREATED = 'PROJECT_SCOPE_CATEGORY_CREATED', 'Project Scope Category Created' PROJECT_SCOPE_CATEGORY_UPDATED = 'PROJECT_SCOPE_CATEGORY_UPDATED', 'Project Scope Category Updated' PROJECT_SCOPE_CATEGORY_DELETED = 'PROJECT_SCOPE_CATEGORY_DELETED', 'Project Scope Category Deleted' PROJECT_SCOPE_TASK_CREATED = 'PROJECT_SCOPE_TASK_CREATED', 'Project Scope Task Created' PROJECT_SCOPE_TASK_UPDATED = 'PROJECT_SCOPE_TASK_UPDATED', 'Project Scope Task Updated' PROJECT_SCOPE_TASK_DELETED = 'PROJECT_SCOPE_TASK_DELETED', 'Project Scope Task Deleted' PROJECT_SCOPE_TEMPLATE_INSTANTIATED = 'PROJECT_SCOPE_TEMPLATE_INSTANTIATED', 'Project Scope Template Instantiated' # Scope events SCOPE_CREATED = 'SCOPE_CREATED', 'Scope Created' SCOPE_UPDATED = 'SCOPE_UPDATED', 'Scope Updated' SCOPE_DELETED = 'SCOPE_DELETED', 'Scope Deleted' AREA_CREATED = 'AREA_CREATED', 'Area Created' AREA_UPDATED = 'AREA_UPDATED', 'Area Updated' AREA_DELETED = 'AREA_DELETED', 'Area Deleted' TASK_CREATED = 'TASK_CREATED', 'Task Created' TASK_UPDATED = 'TASK_UPDATED', 'Task Updated' TASK_DELETED = 'TASK_DELETED', 'Task Deleted' TASK_COMPLETION_RECORDED = 'TASK_COMPLETION_RECORDED', 'Task Completion Recorded' # Scope template events SCOPE_TEMPLATE_CREATED = 'SCOPE_TEMPLATE_CREATED', 'Scope Template Created' SCOPE_TEMPLATE_UPDATED = 'SCOPE_TEMPLATE_UPDATED', 'Scope Template Updated' SCOPE_TEMPLATE_DELETED = 'SCOPE_TEMPLATE_DELETED', 'Scope Template Deleted' SCOPE_TEMPLATE_INSTANTIATED = 'SCOPE_TEMPLATE_INSTANTIATED', 'Scope Template Instantiated' AREA_TEMPLATE_CREATED = 'AREA_TEMPLATE_CREATED', 'Area Template Created' AREA_TEMPLATE_UPDATED = 'AREA_TEMPLATE_UPDATED', 'Area Template Updated' AREA_TEMPLATE_DELETED = 'AREA_TEMPLATE_DELETED', 'Area Template Deleted' TASK_TEMPLATE_CREATED = 'TASK_TEMPLATE_CREATED', 'Task Template Created' TASK_TEMPLATE_UPDATED = 'TASK_TEMPLATE_UPDATED', 'Task Template Updated' TASK_TEMPLATE_DELETED = 'TASK_TEMPLATE_DELETED', 'Task Template Deleted' # Team profile events TEAM_PROFILE_CREATED = 'TEAM_PROFILE_CREATED', 'Team Profile Created' TEAM_PROFILE_UPDATED = 'TEAM_PROFILE_UPDATED', 'Team Profile Updated' TEAM_PROFILE_DELETED = 'TEAM_PROFILE_DELETED', 'Team Profile Deleted' TEAM_PROFILE_ROLE_CHANGED = 'TEAM_PROFILE_ROLE_CHANGED', 'Team Profile Role Changed' # Customer profile events CUSTOMER_PROFILE_CREATED = 'CUSTOMER_PROFILE_CREATED', 'Customer Profile Created' CUSTOMER_PROFILE_UPDATED = 'CUSTOMER_PROFILE_UPDATED', 'Customer Profile Updated' CUSTOMER_PROFILE_DELETED = 'CUSTOMER_PROFILE_DELETED', 'Customer Profile Deleted' CUSTOMER_PROFILE_ACCESS_GRANTED = 'CUSTOMER_PROFILE_ACCESS_GRANTED', 'Customer Profile Access Granted' CUSTOMER_PROFILE_ACCESS_REVOKED = 'CUSTOMER_PROFILE_ACCESS_REVOKED', 'Customer Profile Access Revoked' # Punchlist events ACCOUNT_PUNCHLIST_CREATED = 'ACCOUNT_PUNCHLIST_CREATED', 'Account Punchlist Created' ACCOUNT_PUNCHLIST_UPDATED = 'ACCOUNT_PUNCHLIST_UPDATED', 'Account Punchlist Updated' ACCOUNT_PUNCHLIST_DELETED = 'ACCOUNT_PUNCHLIST_DELETED', 'Account Punchlist Deleted' PROJECT_PUNCHLIST_CREATED = 'PROJECT_PUNCHLIST_CREATED', 'Project Punchlist Created' PROJECT_PUNCHLIST_UPDATED = 'PROJECT_PUNCHLIST_UPDATED', 'Project Punchlist Updated' PROJECT_PUNCHLIST_DELETED = 'PROJECT_PUNCHLIST_DELETED', 'Project Punchlist Deleted' PUNCHLIST_STATUS_CHANGED = 'PUNCHLIST_STATUS_CHANGED', 'Punchlist Status Changed' PUNCHLIST_PRIORITY_CHANGED = 'PUNCHLIST_PRIORITY_CHANGED', 'Punchlist Priority Changed' # Session media events SESSION_IMAGE_UPLOADED = 'SESSION_IMAGE_UPLOADED', 'Session Image Uploaded' SESSION_IMAGE_UPDATED = 'SESSION_IMAGE_UPDATED', 'Session Image Updated' SESSION_IMAGE_DELETED = 'SESSION_IMAGE_DELETED', 'Session Image Deleted' SESSION_VIDEO_UPLOADED = 'SESSION_VIDEO_UPLOADED', 'Session Video Uploaded' SESSION_VIDEO_UPDATED = 'SESSION_VIDEO_UPDATED', 'Session Video Updated' SESSION_VIDEO_DELETED = 'SESSION_VIDEO_DELETED', 'Session Video Deleted' SESSION_MEDIA_INTERNAL_FLAGGED = 'SESSION_MEDIA_INTERNAL_FLAGGED', 'Session Media Flagged as Internal' # Session notes events SESSION_NOTE_CREATED = 'SESSION_NOTE_CREATED', 'Session Note Created' SESSION_NOTE_UPDATED = 'SESSION_NOTE_UPDATED', 'Session Note Updated' SESSION_NOTE_DELETED = 'SESSION_NOTE_DELETED', 'Session Note Deleted' # Report events REPORT_CREATED = 'REPORT_CREATED', 'Report Created' REPORT_UPDATED = 'REPORT_UPDATED', 'Report Updated' REPORT_DELETED = 'REPORT_DELETED', 'Report Deleted' REPORT_SUBMITTED = 'REPORT_SUBMITTED', 'Report Submitted' REPORT_APPROVED = 'REPORT_APPROVED', 'Report Approved' # Invoice events INVOICE_GENERATED = 'INVOICE_GENERATED', 'Invoice Generated' INVOICE_SENT = 'INVOICE_SENT', 'Invoice Sent' INVOICE_PAID = 'INVOICE_PAID', 'Invoice Paid' INVOICE_OVERDUE = 'INVOICE_OVERDUE', 'Invoice Overdue' INVOICE_CANCELLED = 'INVOICE_CANCELLED', 'Invoice Cancelled' # Labor & Revenue events LABOR_RATE_CREATED = 'LABOR_RATE_CREATED', 'Labor Rate Created' LABOR_RATE_UPDATED = 'LABOR_RATE_UPDATED', 'Labor Rate Updated' LABOR_RATE_DELETED = 'LABOR_RATE_DELETED', 'Labor Rate Deleted' REVENUE_RATE_CREATED = 'REVENUE_RATE_CREATED', 'Revenue Rate Created' REVENUE_RATE_UPDATED = 'REVENUE_RATE_UPDATED', 'Revenue Rate Updated' REVENUE_RATE_DELETED = 'REVENUE_RATE_DELETED', 'Revenue Rate Deleted' # Messaging events CONVERSATION_CREATED = 'CONVERSATION_CREATED', 'Conversation Created' CONVERSATION_ARCHIVED = 'CONVERSATION_ARCHIVED', 'Conversation Archived' CONVERSATION_PARTICIPANT_ADDED = 'CONVERSATION_PARTICIPANT_ADDED', 'Participant Added to Conversation' CONVERSATION_PARTICIPANT_REMOVED = 'CONVERSATION_PARTICIPANT_REMOVED', 'Participant Removed from Conversation' MESSAGE_SENT = 'MESSAGE_SENT', 'Message Sent' MESSAGE_RECEIVED = 'MESSAGE_RECEIVED', 'Message Received' MESSAGE_READ = 'MESSAGE_READ', 'Message Read' MESSAGE_DELETED = 'MESSAGE_DELETED', 'Message Deleted' # Monitoring events (audit trail) MONITORING_INCOMPLETE_WORK_REMINDER = 'MONITORING_INCOMPLETE_WORK_REMINDER', 'Incomplete Work Reminder Sent' MONITORING_NIGHTLY_ASSIGNMENTS = 'MONITORING_NIGHTLY_ASSIGNMENTS', 'Nightly Assignments Sent' MONITORING_COMMAND_EXECUTED = 'MONITORING_COMMAND_EXECUTED', 'Monitoring Command Executed' class NotificationChannelChoices(models.TextChoices): """Delivery channels for notifications""" IN_APP = 'IN_APP', 'In-App' EMAIL = 'EMAIL', 'Email' SMS = 'SMS', 'SMS' class NotificationStatusChoices(models.TextChoices): """Status choices for notifications""" PENDING = 'PENDING', 'Pending' SENT = 'SENT', 'Sent' READ = 'READ', 'Read' FAILED = 'FAILED', 'Failed' class DeliveryStatusChoices(models.TextChoices): """Status choices for notification delivery attempts""" PENDING = 'PENDING', 'Pending' QUEUED = 'QUEUED', 'Queued' SENDING = 'SENDING', 'Sending' SENT = 'SENT', 'Sent' DELIVERED = 'DELIVERED', 'Delivered' FAILED = 'FAILED', 'Failed' BOUNCED = 'BOUNCED', 'Bounced' class ConversationTypeChoices(models.TextChoices): """Type of conversation""" DIRECT = 'DIRECT', 'Direct Message' GROUP = 'GROUP', 'Group Conversation' SUPPORT = 'SUPPORT', 'Support Ticket'