-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcontext_processors.py
More file actions
175 lines (138 loc) · 5.43 KB
/
Copy pathcontext_processors.py
File metadata and controls
175 lines (138 loc) · 5.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import hashlib
import hmac
from deprepagos import settings
from events.models import Event, EventTermsAndConditions, EventTermsAndConditionsAcceptance
from tickets.models import NewTicket, TicketType, NewTicketTransfer
def current_event(request):
# For the main page (/), always use main event
if request.path == '/':
try:
event = Event.get_main_event()
except Exception:
event = Event.objects.latest("id")
else:
try:
# Try to get event from request (URL slug, query params, session)
from events.utils import get_event_from_request
event = get_event_from_request(request)
except Exception:
# Fallback to main event or latest
try:
event = Event.get_main_event()
except Exception:
event = Event.objects.latest("id")
# Check if there are multiple active events
active_events = Event.get_active_events()
has_multiple_events = active_events.count() > 1
context = {
"event": event,
"has_multiple_events": has_multiple_events,
}
if request.user.is_authenticated:
tickets = NewTicket.objects.filter(
holder=request.user, event=event
).all()
owns_ticket = NewTicket.objects.filter(
holder=request.user, event=event, owner=request.user
).exists()
tickets_dto = []
for ticket in tickets:
tickets_dto.append(ticket.get_dto(user=request.user))
has_unassigned_tickets = any(
ticket["is_owners"] is False for ticket in tickets_dto
)
has_transfer_pending = any(
ticket["is_transfer_pending"] is True for ticket in tickets_dto
)
shared_tickets = NewTicketTransfer.objects.filter(
tx_from=request.user, status="COMPLETED").count()
# Count holding_tickets based on attendee_must_be_registered
if event.attendee_must_be_registered:
holding_tickets = NewTicket.objects.filter(
holder=request.user, event=event, owner__isnull=True
).count()
else:
holding_tickets = len(tickets)
# Count total tickets across all active events
total_tickets = NewTicket.objects.filter(
event__in=active_events, holder=request.user
).count()
context.update(
{
"has_unassigned_tickets": has_unassigned_tickets,
"has_transfer_pending": has_transfer_pending,
"has_available_tickets": TicketType.objects.get_available_ticket_types_for_current_events().filter(event=event).exists(),
"holding_tickets": holding_tickets,
"shared_tickets": shared_tickets,
"owns_ticket": owns_ticket,
"total_tickets": total_tickets,
}
)
return context
def app_url(request):
return {"APP_URL": settings.APP_URL}
def donation_amount(request):
return {"DONATION_AMOUNT": settings.DONATION_AMOUNT}
def chatwoot_token(request):
return {"CHATWOOT_TOKEN": settings.CHATWOOT_TOKEN}
def env(request):
return {"ENV": settings.ENV}
def chatwoot_identifier_hash(request):
if hasattr(request, "user"):
secret = bytes(settings.CHATWOOT_IDENTITY_VALIDATION, "utf-8")
message = bytes(request.user.username, "utf-8")
hash = hmac.new(secret, message, hashlib.sha256)
identifier_hash = hash.hexdigest()
return {"CHATWOOT_IDENTIFIER_HASH": identifier_hash}
return {"CHATWOOT_IDENTIFIER_HASH": None}
def pending_terms_and_conditions(request):
"""Context processor para verificar términos y condiciones pendientes"""
if not hasattr(request, 'user') or not request.user.is_authenticated:
return {
'pending_terms_by_event': {},
'has_pending_terms': False
}
# No mostrar el modal en ciertas rutas
excluded_paths = [
'/term/',
'/admin/',
'/mi-fuego/complete-profile/',
]
if any(request.path.startswith(path) for path in excluded_paths):
return {
'pending_terms_by_event': {},
'has_pending_terms': False
}
# Obtener todos los eventos donde el usuario tiene bonos
events_with_tickets = Event.objects.filter(
newticket__holder=request.user
).distinct()
pending_terms_by_event = {}
has_pending_terms = False
for event in events_with_tickets:
# Obtener todos los términos y condiciones del evento
event_terms = EventTermsAndConditions.objects.filter(event=event)
if not event_terms.exists():
continue
# Obtener términos ya aceptados por el usuario
accepted_term_ids = set(
EventTermsAndConditionsAcceptance.objects.filter(
user=request.user,
term__event=event
).values_list('term_id', flat=True)
)
# Obtener términos pendientes
pending_terms = [
term for term in event_terms
if term.id not in accepted_term_ids
]
if pending_terms:
pending_terms_by_event[event.slug] = {
'event': event,
'terms': pending_terms,
}
has_pending_terms = True
return {
'pending_terms_by_event': pending_terms_by_event,
'has_pending_terms': has_pending_terms,
}