A Flask application for logistics teams to schedule and track pickup/delivery operations. Users manage events with customer details (name, phone, address), item descriptions, vehicle assignments, and scheduling. Events display in a calendar view, export to iCalendar, and generate printable PDF tickets for drivers.
- Python 58.5%
- JavaScript 21.6%
- HTML 11.9%
- Shell 5.9%
- CSS 1.8%
- Other 0.3%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| migrations | ||
| presentations | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| config.py | ||
| LICENSE | ||
| pytest.ini | ||
| README.md | ||
| requirements.txt | ||
| run.py | ||
Pickup Scheduler
A calendar-based scheduling tool for logistics teams to manage pickups and deliveries. Events display in a calendar view, export to iCalendar, and generate printable PDF tickets for drivers.
Features
- Calendar Overview — Monthly calendar grid with events, blocked days, and holidays color-coded for quick scanning
- Event Management — Create, edit, and delete pickup/delivery events with customer details (name, phone, address), item descriptions, and vehicle assignments
- PDF Tickets — Download printable PDF tickets per event for drivers
- iCalendar Export — Export all events to
.icsformat with token-based sharing links - Blocked Days — Mark date ranges as unavailable to prevent scheduling conflicts
- Holiday Calendar — Automatically sync public holidays from an iCal feed (refreshes every 30 days)
- Role-Based Access — Four permission levels: viewer, editor, admin, and owner
- User Management — Admins can create, edit, and deactivate user accounts; registration can be toggled on/off
- Mobile-Friendly — Responsive layout switches to an agenda view on narrow screens
- Vehicle Tracking — Optionally assign vehicles to events (toggle via config)
Quick Start
Prerequisites
- Python 3.11+
- SQLite
Setup
git clone <repository-url>
cd pickup_scheduler
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Create a .env file:
FLASK_CONFIG=DevelopmentConfig
SECRET_KEY=<your-secret-key>
JWT_SECRET_KEY=<your-jwt-secret>
DATABASE_URL=sqlite:///app.db
OWNER_USERNAME=admin
OWNER_PASSWORD=<your-admin-password>
OWNER_NAME=Admin
REGISTRATION_ENABLED=true
SHOW_VEHICLES=true
HOLIDAY_CALENDAR_URL=https://www.thunderbird.net/media/caldata/autogen/SwedishHolidays.ics
Run migrations and start the server:
flask db upgrade
python run.py
Usage
| What you can do | How |
|---|---|
| View schedule | Open the app — events, blocked days, and holidays appear on the calendar |
| Add event | Click a date or use the "Nytt event" button |
| Block a date | Admin panel → "Blockerade dagar" tab → pick date(s) |
| Print driver ticket | Click an event → "PDF" button (shareable link available) |
| Export calendar | Use the iCal export link with your token |
| Manage users | Admin panel → "Användare" tab |
Deployment
sudo ./scripts/deploy.sh deploy
The deploy script also supports upgrade, start, stop, restart, and status commands.
Testing
pytest -v
License
MIT License — see LICENSE for details.