diff --git a/blueprints/admin/routes.py b/blueprints/admin/routes.py index f215fc9..3a1cd74 100644 --- a/blueprints/admin/routes.py +++ b/blueprints/admin/routes.py @@ -943,6 +943,8 @@ def admin_calendar_new(): if event_type == 'rada' and access_level != 'rada_only': access_level = 'rada_only' + is_external = request.form.get('is_external') == 'on' + event = NordaEvent( title=request.form.get('title', '').strip(), description=sanitize_html(request.form.get('description', '').strip()), @@ -951,10 +953,13 @@ def admin_calendar_new(): time_end=request.form.get('time_end') or None, location=request.form.get('location', '').strip() or None, event_type=event_type, - max_attendees=request.form.get('max_attendees', type=int) or None, + max_attendees=None if is_external else (request.form.get('max_attendees', type=int) or None), access_level=access_level, created_by=current_user.id, - source='manual' + source='manual', + is_external=is_external, + external_url=request.form.get('external_url', '').strip() or None if is_external else None, + external_source=request.form.get('external_source', '').strip() or None if is_external else None, ) # Handle file attachment diff --git a/blueprints/community/calendar/routes.py b/blueprints/community/calendar/routes.py index 0d1aa34..b5fa782 100644 --- a/blueprints/community/calendar/routes.py +++ b/blueprints/community/calendar/routes.py @@ -328,19 +328,22 @@ def rsvp(event_id): EventAttendee.user_id == current_user.id ).first() + is_ext = getattr(event, 'is_external', False) or False + msg_added = 'Oznaczono jako zainteresowany' if is_ext else 'Zapisano na wydarzenie' + msg_removed = 'Usunięto zainteresowanie' if is_ext else 'Wypisano z wydarzenia' + if existing: - # Wypisz db.delete(existing) db.commit() return jsonify({ 'success': True, 'action': 'removed', - 'message': 'Wypisano z wydarzenia', + 'message': msg_removed, 'attendee_count': event.attendee_count }) else: - # Zapisz - if event.max_attendees and event.attendee_count >= event.max_attendees: + # Skip max_attendees check for external events + if not is_ext and event.max_attendees and event.attendee_count >= event.max_attendees: return jsonify({'success': False, 'error': 'Brak wolnych miejsc'}), 400 attendee = EventAttendee( @@ -353,7 +356,7 @@ def rsvp(event_id): return jsonify({ 'success': True, 'action': 'added', - 'message': 'Zapisano na wydarzenie', + 'message': msg_added, 'attendee_count': event.attendee_count }) finally: diff --git a/database.py b/database.py index 68488da..4598dbb 100644 --- a/database.py +++ b/database.py @@ -2174,6 +2174,11 @@ class NordaEvent(Base): organizer_name = Column(String(255), default='Norda Biznes') organizer_email = Column(String(255), default='biuro@norda-biznes.info') + # External event (ARP, KIG, etc.) + is_external = Column(Boolean, default=False) + external_url = Column(String(1000)) # Registration link at external organizer + external_source = Column(String(255)) # Source name (e.g. "Agencja Rozwoju Pomorza") + # Attachment attachment_filename = Column(String(255)) # Original filename attachment_path = Column(String(1000)) # Server path (static/uploads/events/...) diff --git a/database/migrations/086_external_events.sql b/database/migrations/086_external_events.sql new file mode 100644 index 0000000..a2b248f --- /dev/null +++ b/database/migrations/086_external_events.sql @@ -0,0 +1,9 @@ +-- Migration 086: Add external event fields to norda_events +-- For KIG integration: external events from ARP, KIG, partner organizations + +ALTER TABLE norda_events ADD COLUMN IF NOT EXISTS is_external BOOLEAN DEFAULT FALSE; +ALTER TABLE norda_events ADD COLUMN IF NOT EXISTS external_url VARCHAR(1000); +ALTER TABLE norda_events ADD COLUMN IF NOT EXISTS external_source VARCHAR(255); + +-- Grant permissions +GRANT ALL ON TABLE norda_events TO nordabiz_app; diff --git a/templates/calendar/admin_new.html b/templates/calendar/admin_new.html index 9791f35..3cd3545 100755 --- a/templates/calendar/admin_new.html +++ b/templates/calendar/admin_new.html @@ -106,6 +106,27 @@