Files
guilan-ace-backend/apps/events/resources.py
Amirhossein Khalili 6c5fadef2f feat: derive event lifecycle status from dates and flags
Replace persisted event statuses with publication and cancellation flags, and compute public lifecycle labels from event timing and registration capacity. Keep filters, registration checks, and profile responses aligned with the derived status.
2026-10-03 12:46:16 +03:30

87 lines
2.7 KiB
Python

from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget, ManyToManyWidget
from apps.events.models import Event, Registration
from apps.users.models import User
from apps.gallery.models import Gallery
from apps.payments.models import DiscountCode
class EventResource(resources.ModelResource):
gallery_images = fields.Field(
column_name='gallery_images',
attribute='gallery_images',
widget=ManyToManyWidget(Gallery, field='title', separator='|')
)
class Meta:
model = Event
fields = (
'id', 'title', 'slug', 'description', 'start_time', 'end_time',
'event_type', 'address', 'location', 'online_link', 'is_published', 'is_cancelled',
'capacity', 'price', 'registration_start_date', 'registration_end_date',
'featured_image', 'gallery_images', 'created_at', 'updated_at',
'is_deleted', 'deleted_at'
)
export_order = fields
class RegistrationResource(resources.ModelResource):
"""Export registrations with user attributes and shortened ticket identifiers."""
event = fields.Field(
column_name='event',
attribute='event',
widget=ForeignKeyWidget(Event, 'title')
)
user_username = fields.Field(
column_name='user_username',
attribute='user',
widget=ForeignKeyWidget(User, 'username')
)
user_email = fields.Field(
column_name='user_email',
attribute='user',
widget=ForeignKeyWidget(User, 'email')
)
user_first_name = fields.Field(
column_name='user_first_name',
attribute='user',
widget=ForeignKeyWidget(User, 'first_name')
)
user_last_name = fields.Field(
column_name='user_last_name',
attribute='user',
widget=ForeignKeyWidget(User, 'last_name')
)
discount_code = fields.Field(
column_name='discount_code',
attribute='discount_code',
widget=ForeignKeyWidget(DiscountCode, 'code')
)
class Meta:
model = Registration
fields = (
'id',
'event',
'user_username',
'user_email',
'user_first_name',
'user_last_name',
'registered_at',
'status',
'ticket_id',
'discount_code',
'discount_amount',
'final_price',
'created_at',
'updated_at',
'is_deleted',
'deleted_at',
)
export_order = fields
def dehydrate_ticket_id(self, obj):
"""Limit ticket identifiers to eight characters in exports."""
val = getattr(obj, 'ticket_id', '')
return str(val)[:8] if val else ''