https://github.com/aryanvbw/eventyay-checkout

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
Last synced: 10 months ago · JSON representation

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
Created 12 months ago · Last pushed 11 months ago
Metadata Files
Readme

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 event
  • perform_single_checkout(): Checks out a single attendee position
  • CheckOutError: 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 from
    • force (optional): Force checkout even if not checked in
    • datetime (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 checkout
    • checkin_list_id: Checkin list ID
    • force (optional): Force checkout even if not checked in
    • datetime (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)

  1. 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
  2. Bulk Checkout:

    • Go to the Stats page
    • Enable "Checkout Mode" using the toggle
    • Click "Bulk Checkout All" button
    • Confirm the operation

For Developers (API)

  1. 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 }'

  2. 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 in
  • invalid_position: Position or checkin list not found
  • permission_denied: Insufficient permissions
  • validation_error: Invalid request data

Frontend Errors

  • QR code validation
  • Network connectivity issues
  • API response handling
  • User feedback messages

Security Considerations

  1. Authentication: All API endpoints require proper authentication
  2. Authorization: Permission checks for checkin/checkout operations
  3. Validation: Input validation for all parameters
  4. Audit Trail: All operations are logged for accountability

Performance Optimizations

  1. Bulk Operations: Efficient database queries for bulk checkout
  2. Transactions: Atomic operations to prevent data inconsistency
  3. Caching: Event and checkin list caching where appropriate
  4. Error Handling: Graceful degradation on failures

Future Enhancements

  1. Partial Checkout: Support for checking out specific checkin lists
  2. Scheduled Checkout: Automatic checkout at specified times
  3. Export Functionality: Export checkout data and statistics
  4. Mobile Optimization: Enhanced mobile interface for staff
  5. Offline Support: Offline checkout capability with sync

Development Practices Followed

  1. Minimal Changes: Leveraged existing patterns and structures
  2. Reusable Code: Created separate service files for maintainability
  3. Error Handling: Comprehensive error handling for edge cases
  4. Testing: Full test coverage for new functionality
  5. 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

🛰 𝐒𝐢𝐦𝐩𝐥𝐢𝐜𝐢𝐭𝐲 𝐒𝐩𝐚𝐫𝐤𝐬 𝐈𝐧𝐧𝐨𝐯𝐚𝐭𝐢𝐨𝐧🛡️ 🌟 Dive into the Future: ✨𒆜🆅🅸🆅🅴🅺 🆆𒆜 Studying in Newton school of Technology🚀

GitHub Events

Total
  • Create event: 3
Last Year
  • Create event: 3

Dependencies

eventyay-checkin/Dockerfile docker
  • base latest build
  • deps latest build
  • node ${NODE_VERSION}-alpine build
eventyay-tickets/Dockerfile docker
  • python 3.11-bookworm build
eventyay-checkin/package-lock.json npm
  • 598 dependencies
eventyay-checkin/package.json npm
  • @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
eventyay-tickets/src/pretix/static/npm_dir/package-lock.json npm
  • 327 dependencies
eventyay-tickets/src/pretix/static/npm_dir/package.json npm
  • @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
eventyay-tickets/doc/requirements.txt pypi
  • pyenchant patch-1
  • pygments-markdown-lexer *
  • sphinx ==2.3.
  • sphinx-rtd-theme *
  • sphinxcontrib-httpdomain *
  • sphinxcontrib-images *
  • sphinxcontrib-spelling ==4.
  • sphinxemoji *
eventyay-tickets/pyproject.toml pypi
  • 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.*
eventyay-tickets/setup.py pypi
eventyay-tickets/uv.lock pypi
  • 174 dependencies