https://github.com/aryanvbw/eventyay-checkout
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (8.1%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: AryanVBW
- Language: Python
- Default Branch: main
- Size: 23.3 MB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
- Releases: 0
Metadata Files
README.md
Checkout Functionality Implementation
This document describes the implementation of checkout functionality for the eventyay-tickets backend and Check-In app.
Overview
The checkout functionality allows event organizers to: 1. Check out individual attendees via QR code scanning 2. Perform bulk checkout of all checked-in attendees for an event 3. Toggle between check-in and check-out modes in the UI 4. Track checkout statistics alongside check-in statistics
Backend Implementation (eventyay-tickets)
1. Checkout Service (pretix/base/services/checkout.py)
New file created with reusable checkout functions:
perform_bulk_checkout(): Checks out all attendees currently checked in to an eventperform_single_checkout(): Checks out a single attendee positionCheckOutError: Custom exception class for checkout-specific errors
Key Features: - Transactional operations for data integrity - Comprehensive error handling - Support for forced checkouts - Audit logging for all checkout operations - Signal emission for external integrations
2. API Views (pretix/api/views/checkin.py)
Added new API endpoints:
Bulk Checkout API
- Endpoint:
POST /api/v1/organizers/{organizer}/events/{event}/checkout/bulk/ - Purpose: Check out all attendees in an event
- Parameters:
checkin_lists(optional): List of checkin list IDs to checkout fromforce(optional): Force checkout even if not checked indatetime(optional): Custom checkout timestamp
Single Checkout API
- Endpoint:
POST /api/v1/organizers/{organizer}/events/{event}/checkout/single/ - Purpose: Check out a specific attendee
- Parameters:
position_id: Order position ID to checkoutcheckin_list_id: Checkin list IDforce(optional): Force checkout even if not checked indatetime(optional): Custom checkout timestamp
3. URL Configuration (pretix/api/urls.py)
Added new URL patterns for checkout endpoints:
- /checkout/bulk/ for bulk operations
- /checkout/single/ for individual operations
4. Testing (tests/api/test_checkout.py)
Comprehensive test suite including: - Authentication requirements - Empty event scenarios - Bulk checkout with checked-in attendees - Single attendee checkout - Error handling for non-checked-in attendees - Forced checkout functionality
Frontend Implementation (eventyay-checkin)
1. Checkout Store (src/stores/processCheckOut.js)
New store for managing checkout operations:
- checkOutAttendeeScannerFromRoom(): Handle QR code checkout scanning
- bulkCheckOutEvent(): Perform bulk checkout via API
- Error handling and user feedback
- Integration with loading states
2. Attendees Store Updates (src/stores/attendees.js)
Extended existing store with checkout functions:
- checkOutAttendee(): Individual attendee checkout
- bulkCheckOutEvent(): Bulk event checkout
- Pretix API integration
3. Checkout Camera Component (src/components/CheckIn/CheckOutCamera.vue)
New component for checkout scanning: - QR code scanning for checkout operations - Session support for non-daily scanners - Real-time feedback messages - Consistent UI with check-in component
4. Enhanced Check-In Components
Check-In Camera (src/components/CheckIn/CheckInCamera.vue)
Enhanced with: - Mode toggle between check-in and check-out - Dynamic QR type switching - Dual store management - Visual mode indicators
Check-In Stats (src/components/CheckIn/CheckInStats.vue)
Enhanced with: - Checkout mode toggle switch - Bulk checkout button - Checkout status messages - Real-time stats refresh
QR Camera (src/components/Common/QRCamera.vue)
Enhanced with:
- Support for checkOut QR type
- Integration with checkout store
- Unified scanning interface
Usage Instructions
For Event Staff (Frontend)
Individual Checkout:
- Navigate to the check-in interface
- Toggle to "Check-Out" mode using the mode buttons
- Scan attendee's QR code
- Receive immediate feedback
Bulk Checkout:
- Go to the Stats page
- Enable "Checkout Mode" using the toggle
- Click "Bulk Checkout All" button
- Confirm the operation
For Developers (API)
Bulk Checkout:
bash curl -X POST \ 'https://api.eventyay.com/api/v1/organizers/myorg/events/myevent/checkout/bulk/' \ -H 'Authorization: JWT your-token' \ -H 'Content-Type: application/json' \ -d '{ "checkin_lists": [1, 2], "force": false }'Single Checkout:
bash curl -X POST \ 'https://api.eventyay.com/api/v1/organizers/myorg/events/myevent/checkout/single/' \ -H 'Authorization: JWT your-token' \ -H 'Content-Type: application/json' \ -d '{ "position_id": 123, "checkin_list_id": 1, "force": false }'
Error Handling
Backend Errors
not_checked_in: Attendee is not currently checked ininvalid_position: Position or checkin list not foundpermission_denied: Insufficient permissionsvalidation_error: Invalid request data
Frontend Errors
- QR code validation
- Network connectivity issues
- API response handling
- User feedback messages
Security Considerations
- Authentication: All API endpoints require proper authentication
- Authorization: Permission checks for checkin/checkout operations
- Validation: Input validation for all parameters
- Audit Trail: All operations are logged for accountability
Performance Optimizations
- Bulk Operations: Efficient database queries for bulk checkout
- Transactions: Atomic operations to prevent data inconsistency
- Caching: Event and checkin list caching where appropriate
- Error Handling: Graceful degradation on failures
Future Enhancements
- Partial Checkout: Support for checking out specific checkin lists
- Scheduled Checkout: Automatic checkout at specified times
- Export Functionality: Export checkout data and statistics
- Mobile Optimization: Enhanced mobile interface for staff
- Offline Support: Offline checkout capability with sync
Development Practices Followed
- Minimal Changes: Leveraged existing patterns and structures
- Reusable Code: Created separate service files for maintainability
- Error Handling: Comprehensive error handling for edge cases
- Testing: Full test coverage for new functionality
- Documentation: Clear documentation and code comments
Integration Points
The checkout functionality integrates with: - Existing checkin system - Order management - Event statistics - Audit logging - Permission system - Device authentication
This implementation provides a robust, scalable checkout system that complements the existing check-in functionality while maintaining code quality and system reliability.
Owner
- Name: Vivek W
- Login: AryanVBW
- Kind: user
- Location: india
- Company: @TEch-Shop
- Website: http://portfolio.aryanvbw.live/
- Twitter: vivekwagadare
- Repositories: 1
- Profile: https://github.com/AryanVBW
🛰 𝐒𝐢𝐦𝐩𝐥𝐢𝐜𝐢𝐭𝐲 𝐒𝐩𝐚𝐫𝐤𝐬 𝐈𝐧𝐧𝐨𝐯𝐚𝐭𝐢𝐨𝐧🛡️ 🌟 Dive into the Future: ✨𒆜🆅🅸🆅🅴🅺 🆆𒆜 Studying in Newton school of Technology🚀
GitHub Events
Total
- Create event: 3
Last Year
- Create event: 3
Dependencies
- base latest build
- deps latest build
- node ${NODE_VERSION}-alpine build
- python 3.11-bookworm build
- 598 dependencies
- @rushstack/eslint-patch ^1.2.0 development
- @tailwindcss/forms ^0.5.3 development
- @vitejs/plugin-vue ^4.2.3 development
- @vue/eslint-config-prettier ^7.1.0 development
- @vue/test-utils ^2.3.2 development
- autoprefixer ^10.4.14 development
- cypress ^12.14.0 development
- eslint ^8.46.0 development
- eslint-plugin-cypress ^2.13.3 development
- eslint-plugin-vue ^9.11.0 development
- jsdom ^22.1.0 development
- postcss ^8.4.24 development
- prettier ^3.0.3 development
- prettier-plugin-organize-imports ^3.2.3 development
- prettier-plugin-svelte ^3.0.3 development
- prettier-plugin-tailwindcss ^0.5.4 development
- start-server-and-test ^2.0.0 development
- tailwindcss ^3.3.2 development
- vite ^4.3.9 development
- vitest ^0.32.0 development
- @headlessui/vue ^1.7.14
- @heroicons/vue ^2.0.18
- dayjs ^1.11.9
- mande ^2.0.6
- pinia ^2.1.3
- pinia-plugin-persistedstate ^4.1.2
- vue ^3.3.4
- vue-qrcode-reader ^5.3.4
- vue-router ^4.2.2
- 327 dependencies
- @babel/core ^7.27.4
- @babel/preset-env ^7.27.2
- @rollup/plugin-babel ^6.0.4
- @rollup/plugin-node-resolve ^13.3.0
- rollup ^2.79.2
- rollup-plugin-vue ^5.0.1
- vue ^2.7.10
- vue-template-compiler ^2.7.10
- pyenchant patch-1
- pygments-markdown-lexer *
- sphinx ==2.3.
- sphinx-rtd-theme *
- sphinxcontrib-httpdomain *
- sphinxcontrib-images *
- sphinxcontrib-spelling ==4.
- sphinxemoji *
- BeautifulSoup4 ==4.12.*
- Django ==5.1.*
- Pillow ==11.0.*
- PyJWT ~=2.8.0
- arabic-reshaper ==3.0.0
- babel *
- bleach ==5.0.*
- celery ==5.4.*
- chardet ==5.2.*
- cron-descriptor ==1.4.5
- cryptography >=3.4.2
- css-inline ==0.14.*
- csscompressor *
- defusedcsv >=1.1.0
- dj-static *
- django-allauth [socialaccount] @ git+https://codeberg.org/quan/django-allauth.git@f151589949
- django-bootstrap3 ==24.3
- django-compressor ==4.5.1
- django-cors-headers *
- django-countries ==7.6.*
- django-filter ==24.3
- django-formset-js-improved ==0.5.0.3
- django-formtools ==2.5.1
- django-hierarkey ==1.2.*
- django-hijack ==3.7.*
- django-i18nfield ==1.9.*,>=1.9.4
- django-libsass ==0.9
- django-localflavor ==4.0
- django-markup *
- django-oauth-toolkit ==2.4.*
- django-otp ==1.5.*
- django-phonenumber-field ==7.3.*
- django-redis ==5.4.*
- django-scopes ==2.0.*
- django-sso ==3.0.2
- django-statici18n ==2.5.*
- django_celery_beat ==2.7.0
- djangorestframework ==3.15.*
- eventyay-paypal @ git+https://your_token@github.com/fossasia/eventyay-tickets-paypal.git@master
- eventyay-stripe @ git+https://github.com/fossasia/eventyay-tickets-stripe.git@master
- exhibitors @ git+https://github.com/fossasia/eventyay-tickets-exhibitors.git@master
- fakeredis ==2.26.*
- geoip2 ==4.*
- importlib_metadata ==8.*
- isoweek *
- jsonschema *
- kombu ==5.3.*
- libsass ==0.23.*
- lxml *
- markdown ==3.7
- mt-940 ==4.30.*
- nh3 >=0.2.21
- oauthlib ==3.2.*
- openpyxl ==3.1.*
- packaging *
- phonenumberslite ==8.13.*
- pretix-pages @ git+https://github.com/fossasia/eventyay-ticket-pages.git@master
- pretix-venueless @ git+https://github.com/fossasia/eventyay-ticket-video.git@master
- protobuf ==5.28.*
- psycopg2-binary ==2.9.9
- pycountry *
- pycparser ==2.22
- pycryptodome ==3.20.*
- pydantic ==2.10.4
- pypdf ==5.1.*
- python-bidi ==0.6.*
- python-dateutil ==2.9.*
- pytz *
- pyuca *
- pyvat ==1.3.18
- qrcode ==7.4.*
- redis ==5.0.*
- reportlab ==4.2.*
- requests ==2.31.*
- sendgrid ==6.11.*
- sentry-sdk ==2.19.*
- sepaxml ==2.6.*
- static3 ==0.7.*
- stripe ==11.3.*
- text-unidecode ==1.*
- tlds >=2020041600
- tqdm ==4.*
- vat_moss_forked ==2020.3.20.0.11.0
- vobject ==0.9.*
- webauthn ==2.2.*
- 174 dependencies