* build: move frontend assets to Bootstrap 5.3 and Tom Select
* feat: migrate templates and scripts to Bootstrap 5, dropping jQuery
Templates
- Rename Bootstrap 4 classes and data attributes (data-bs-*, ms-/me-/ps-/pe-,
text-start/end, form-group -> mb-3, input-group wrappers removed, badges,
custom controls -> form-check/form-select, media -> d-flex, btn-close, ...)
- Dark mode now uses Bootstrap 5.3 colour modes (data-bs-theme on <html>),
set from <head> to avoid a flash of the light theme
- Remove the Bootstrap 4 /bootstrap/ demo page
- Contextual table classes (table-success etc.) still work as plain
backgrounds for the rigboard key
JavaScript
- Remove jQuery: src.js/interaction.js and every inline template script are
rewritten in plain JS on top of small helpers (helpers.js, bundled with
Bootstrap into jpop.js so inline scripts can use them)
- Replace bootstrap-select/ajax-bootstrap-select with Tom Select. The remote
search now sends the `q` parameter and reads `text`, which is what the
API actually uses (the old picker sent `term` and read `label`)
- HTML fragments are fetched with an X-Requested-With header so views keep
rendering their modal variants, and fetched scripts are re-executed
- Remove the Bootstrap 4 plugin script includes
* fix: stop rigboard header buttons stretching to full width under Bootstrap 5
* fix: restore dark-mode brand colours and contextual table colours under Bootstrap 5
* fix: brighten dark-mode links and make coloured card outlines visible
* fix: calendar layout and grid borders, navbar search button width, guard missing modal links
* fix: readable text in dark-mode Tom Select inputs and placeholders, restore form-control column widths
* build: split the Dockerfile into cached stages with prod and dev targets
* deploy: make compose.yml development-only with live reload, and document it
* fix: keep badge text colour for links inside badges
* fix: restore table-bordered grid lines in dark mode
* fix: include Bootstrap's progress styles and keep progress labels readable
* Port to Django 5.2
* Pin pluggy to 1.2.0
Any newer and the mystery importlib metadata error appears. Weird! >_>
* Update for premailer changed default
* Update view logic for is_ajax being changed to a template context processor
* Port a few more tests to pytest proper
Having two distinct test flavours is giving me a headache
* Version 1 dockerfile
Makes a VERY big image, I suspect we can optimise this a lot...
* Optimise dockerfile a little lot a bit
* fix(users): change logout link to POST request
* fix(tests): fix some syntax errors in test code
still got lots of failed tests :(
* fix: replace deprecated Django APIs
* ci: update Dockerfile
* ci: update Dockerfile
* fix(dependencies+tests): update EoL/vulnerable dependencies and improve test stability
* Upgrade Python from 3.10 to 3.12
* Update frontend dependencies, replace node-sass with sass
* chore(logging): ignore dangling obj reference warning from pypdf
* ci: update compose.yml for prod deployment
- Add Nginx as a reverse proxy
- Add cert-selfsign.sh for generating self-signed certificates
- Add certbot-issue.sh for Let's Encrypt certificate issuance and renewal
- Add cron-install.sh and cron-uninstall.sh for system cron management
- Add .env.example as an environment variable template
* style: reformat code
* ci: add more sleep trying to pass tests
* ci: ignore browser-based tests during ci testing
* fix: create home for the new user during Dockerfile building
* chore: remove heroku conf file
* fix: RIGS not franken anymore
* fix: restore is_ajax as a boolean and split out the context processor
* test: remove Selenium interaction tests and their CI workarounds
* fix: harden production settings (CSRF origins, env casts, ADMINS) and drop dead debug toolbar code
* deploy: serve static files from nginx, pin PGDATA, and make cert scripts loud on failure
* build: switch .dockerignore to an allowlist
* build: drop unused dependencies, soft-pin the rest and target Python 3.14
* build: move image to Python 3.14 / Node 24 and force DEBUG off
* ci: add dependabot config for uv, npm, docker and actions
* build: narrow Sass deprecation silencing to @import and require Node 24
* build: provide placeholder env for collectstatic now that DEBUG is off in the image
* deploy: add plain-HTTP nginx config for local development and use it in compose
* deploy: remove self-signed cert script
* build: make the image multi-arch with official node and python base images
* ci: lint and test on PRs, build the image on PRs and push it to GHCR on master
* docs: add local running and sample data instructions
* fix: report a form error instead of crashing when big power has no Power MIC
* fix: upgrade pypdf and urllib3 to patched releases
* fix: apply non-breaking npm audit fixes
* fix: strip whitespace in ALLOWED_HOSTS and drop misleading HSTS preload
* deploy: add a pyrigs healthcheck and make nginx wait for it
* build: pin the uv image version
* fix: correct the check-in person picker condition and use BeautifulSoup's string argument
* refactor: replace unique_together with UniqueConstraint
* build: replace pycodestyle with ruff and fix what it found
Removes unused imports and variables, and fixes a few real problems it
surfaced:
- EventCheckIn.active() referenced an undefined name and raised NameError;
it now returns whether the check-in has no end time
- RIGS.admin defined EventChecklistAdmin twice; the second is now
PowerTestRecordAdmin
- RIGS/tests/conftest.py used date/timedelta without importing them
- the signal-registering imports in apps.py are kept with noqa
pycodestyle config in setup.cfg is dropped.
* style: format the codebase with ruff
* style: normalise line endings, trailing whitespace and end-of-file newlines
* ci: run ruff and file hygiene through prek, and document it
---------
Co-authored-by: Hang <me@hangxu.me>
Co-authored-by: Joe Banks <joe@jb3.dev>
* Add fields to rig info for additional access requirements
* Add form field for additional access requirements
* Display access requirements in rig info
* Make access requirements field non-required
Oops...
* Add event access field to risk assessment
* Allow for modification and display risk assessment venue access item
* Correct tests for RAs with new parking fields
* Add note to new venue access component of RA
* Correct div boundaries for non-rig access requirements
* Fill parking and access field in sample data generator
* Set parking and access field to false in RA creation test
* Hopefully the final correction of the RA test suite
* Disable thousands separation in locale settings that caused issues updating rigs
* Update invoice dashboard to use "g" suffixed floatformats for thousands separation
* Enable commas for float thousands separation
* Add new invoice dashboard template
* Add new view controller for finance dashboard
* Add finance dashboard to dropdown
* Update finance URLs to put dashboard at index route
* Add payment methods to generated sample data
* Flip 'outstanding' and 'waiting' cards on dashboard to match order in dropdown
Also made them link to their respective lists and fixed low text contrast
---------
Co-authored-by: FreneticScribbler <aj@aronajones.com>
* Add new block to base_print.xml for additional styles from downstream templates
* Fix page totals on exports by adding <namedString> element
* Add new print template for power test records
* Add a generated name property to power tests to allow for export
* Add new routes for print export for power tests
* Add print button to power test records view page
* Address linting errors
* Revive this concept for 2023
(cherry picked from commit b3939d8426)
# Conflicts:
# pipeline/source_assets/scss/dark_screen.scss
* Update app.json
* Updates to all three layouts
Another silly copy paste error from ECs. Also really makes me want 'repeatable fragments' in Django templating so that the top and bottom page buttons could actually be the same...
* Add button for creating forum thread draft from event detail
TODO: Allow RIGS to ingest POST requests sent from the forum on new posts in RIG info to link up the forum thread
RE https://forum.nottinghamtec.co.uk/t/rigs-discourse-integration/15592/21
* Mockup webhook recieving view
* Correct method of CRSF exemption for webhook reciever
* Use f-strings correctly, not like a big dumb
* That was also dumb, fix that too
* Second shot at webhook reciever
* Oops
* >.<
* Third shot
* Try again at signing
* What if I gave it the right arguments. That might be a good start.
* More fiddling with auth
* Add debug print
* Okay, put that back where it was because I inavertently overloaded my import
Flashbacks to my java days...
* Different header access method
* Fix import, again
* Fix ommited json parsing wotsit
* Fix url
* Fix string index
* Correct template logic
* Allow manual adding/editing of URLs
* Filter by right flavour of event
* Amend event str conversion for consistency
* Oops
* Make migration
Will be squashed later
* Fix logic when creating events
* Squash migration
* Implement codedoctor suggestion
* Add absolute URL to power tests
* Update to target Python 3.10
* Return user to current page when clicking 'mark reviewed'
* Add units to power test record detail and form
I'm a bad scientist (coz I'm an engineer)
* Allow a higher value in PSSC fields
* Default venue to event venue in EC/PT
* Fix population of initial venue values for EC/PT
* Add link to create power test from EC detail
* Do not set power plan field to required on RA
"This might be a problem if the risk assessment is being done by one person and the power plan by another."
* Default power MIC to MIC
* Implement some suggestions from the Doctor
* Prevent checking in to cancelled events and dry hires
Will close#539
* Exclude dry hires from H&S overview list
* Add "ex VAT" tooltips to asset purchase price and replacement cost
* Automagically clear and focus ID field when audit modal closes
Closes#533
* Delete unused things
* Allow two decimal places in cable length, show training item IDs in selectpicker
Will close#540
* Fix#524 500 Error when viewing qualification list for items nobody is qualified in
* Update README.md
* Add a guard against nulls in recent changes
Maybe fixes#537 I'm unable to replicate locally
* Turn down verbosity of CI tests, fix tests, potential speedup
* Squash migration
* Add encoding to open
* Update to v3 upload-artifact
Resolves a deprecation warning
* Split power related parts of event checklist into a seperate form
* Revamp H&S overview, remove individual lists.
They were not a good thing.
* Remove old 'vehicle/crew' stuff
* Very initial version of checkin form
* Further work on checkin, add role field etc
* Fix tests after form split
* Add ability to edit checkins, more validation
* Basic checkin/out logic complete
* Add homepage checkin for events happening now
* Minor improvement to homepage UI
* Checkin button turns into checkout button where applicable
* UI work
* Clicking check out does not redirect the user
* Register check in model with the admin site
* Add power record status chip, checklist status chip displays number of checklists
* Minor fixes
* Implement codedoctor suggestions
* pep8
* Add data migration for crew/vehicles
* Checkin only requires login (no perms) and block users from editing other checkins at Django level
* Add 'description' field to TrainingItems
Renamed existing field to name, removed the dummy property.
* Initial version of training item export view
* Fix line length issue and better spacing on exported PDF
* Added export button to item list
* pep8
* Implement code doctor tweaks
* Attempt to fix odd deployment issue
* Pad headers slightly
* Fix page numbering