Merge branch 'master' into markdown

# Conflicts:
#	RIGS/static/scss/screen.scss
#	RIGS/templates/RIGS/event_detail.html
#	RIGS/templates/RIGS/event_form.html
#	RIGS/templates/RIGS/event_table.html
#	RIGS/templates/RIGS/item_row.html
#	RIGS/templates/RIGS/item_table.html
#	RIGS/templates/RIGS/organisation_detail.html
#	RIGS/templates/RIGS/organisation_form.html
#	RIGS/templates/RIGS/person_detail.html
#	RIGS/templates/RIGS/person_form.html
#	RIGS/templates/RIGS/rigboard.html
#	RIGS/templates/RIGS/venue_detail.html
#	RIGS/templates/RIGS/venue_form.html
#	RIGS/templates/event_print.xml
#	RIGS/templates/event_print_page.xml
#	RIGS/templates/item_modal.html
#	RIGS/tests/test_unit.py
#	assets/templates/asset_create.html
#	assets/templates/asset_update.html
#	assets/templates/partials/asset_detail_form.html
#	requirements.txt
#	templates/base.html
This commit is contained in:
2021-12-22 11:41:18 +00:00
407 changed files with 24735 additions and 37429 deletions

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Bad Request{% endblock %}
{% block content %}

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Unauthorized{% endblock %}
{% block content %}

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Forbidden{% endblock %}
{% block content %}

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Page Not Found{% endblock %}
{% block content %}

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Server error{% endblock %}
{% block content %}

View File

@@ -0,0 +1,40 @@
{% extends "admin/base_site.html" %}
{% load i18n l10n %}
{% block content %}
<form action="" method="post">{% csrf_token %}
<p>The following objects will be merged. Please select the 'master' record which you would like to keep. Other records will have associated events moved to the 'master' copy, and then will be deleted.</p>
<table>
{% for form in forms %}
{% if forloop.first %}
<tr>
<th></th>
<th> ID </th>
{% for field in form %}
<th>{{ field.label }}</th>
{% endfor %}
</tr>
{% endif %}
<tr>
<td><input type="radio" name="master" value="{{form.instance.pk|unlocalize}}"></td>
<td>{{form.instance.pk}}</td>
{% for field in form %}
<td> {{ field.value }} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
<div>
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
{% endfor %}
<input type="hidden" name="action" value="merge" />
<input type="hidden" name="post" value="yes" />
<input type="submit" value="Merge them" />
</div>
</form>
{% endblock %}

View File

@@ -1,6 +1,4 @@
{% load static from staticfiles %}
{% load raven %}
{% load static %}
<!DOCTYPE html>
<html
@@ -8,24 +6,21 @@
xml:lang="{% firstof LANGUAGE_CODE 'en' %}"
lang="{% firstof LANGUAGE_CODE 'en' %}">
<head>
<title>{% block title %}{% endblock %} | Rig Information Gathering System</title>
<title>{% block title %}{{page_title|striptags}}{% endblock %} | Rig Information Gathering System</title>
<meta name="viewport" content="initial-scale=1">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#3853a4">
<meta name="color-scheme" content="light dark">
<link rel="icon" type="image/png" href="{% static "imgs/pyrigs-avatar.png" %}">
<link rel="apple-touch-icon" href="{% static "imgs/pyrigs-avatar.png" %}">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400italic,700,300,400' rel='stylesheet'
type='text/css'>
<link rel="icon" type="image/png" href="{% static 'imgs/pyrigs-avatar.png' %}">
<link rel="apple-touch-icon" href="{% static 'imgs/pyrigs-avatar.png' %}">
<link rel="stylesheet" type="text/css" href="{% static "css/screen.css" %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/screen.css' %}">
{% block css %}
{% endblock %}
<script src="https://code.jquery.com/jquery-1.8.3.min.js"
integrity="sha256-YcbK69I5IXQftf/mYD8WY0/KmEDCv1asggHpJk1trM8=" crossorigin="anonymous"></script>
<script src="https://cdn.ravenjs.com/1.3.0/jquery,native/raven.min.js"></script>
<script>Raven.config('{% sentry_public_dsn %}').install()</script>
<script src="{% static 'js/jpop.js' %}"></script>
{% block preload_js %}
{% endblock %}
@@ -33,139 +28,60 @@
</head>
<body>
<a class="skip-link" href='#main'>Skip to content</a>
{% include "analytics.html" %}
<div class="navbar navbar-fixed-top navbar-inverse hidden-print" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
{% block titleheader %}
{% endblock %}
</div>
<div class="navbar-collapse">
<ul class="nav navbar-nav">
{% block titleelements %}
{% endblock %}
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown" id="user">
{% if user.is_authenticated %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span class="glyphicon glyphicon-user"></span>
Hi {{ user.first_name }}
<b class="caret"></b>
</a>
<ul class="dropdown-menu nav media-list pull-right" id="userdropdown">
<li class="media">
<a href="{% url 'profile_detail' %}">
<div class="media-left">
<img src="{{ request.user.profile_picture }}" class="media-object"/>
</div>
<div class="media-body">
<b>{{ request.user.first_name }} {{ request.user.last_name }}</b>
<p class="muted">{{ request.user.email }}</p>
</div>
</a>
</li>
<li>
<div class="col-sm-12 text-right">
<a href="{% url 'logout' %}" class="btn btn-primary">Logout</a>
</div>
</li>
</ul>
{% else %}
<a href="{% url "login" %}">
<span class="icon-user"></span>
Login
</a>
{% endif %}
</li>
</ul>
</div>
</div>
</div>
<div class="container">
<div id="content" class="row">
{% block content-header %}
{% if error %}
<div class="error">{{ error }}</div>{% endif %}
{% if info %}
<div class="info">{{ info }}</div>{% endif %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.level_tag }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
{{ message }}
</div>
{% endfor %}
{% endif %}
{% block navbar %}
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" role="navigation">
<div class="container">
<a class="navbar-brand" style="position: absolute; left:0.5em; top: 2px;" href="{% if request.user.is_authenticated %}https://rigs.nottinghamtec.co.uk{%else%}https://nottinghamtec.co.uk{%endif%}">
<img src="{% static 'imgs/logo.webp' %}" width="40" height="40" alt="TEC's Logo: Serif 'TEC' vertically next to a blue box with the words 'PA and Lighting', surrounded by graduated rings" id="logo">
</a>
{% block titleheader %}
{% endblock %}
<button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" onclick="document.getElementById('logo').classList.toggle('d-none');">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-between" id="navbarSupportedContent">
<ul class="navbar-nav">
{% block titleelements %}
{% endblock %}
{% block content %}{% endblock %}
</div>
<div id="sidebar" class="column">
{% block sidebar %}
</ul>
<ul class="navbar-nav align-self-end">
{% block titleelements_right %}
{% endblock %}
</div>
</ul>
</div>
</div>
</nav>
{% endblock %}
<div class="container py-4" id="main">
{% block content-header %}
{% if error %}
<div class="error">{{ error }}</div>{% endif %}
{% if info %}
<div class="info">{{ info }}</div>{% endif %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.level_tag }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endblock %}
{% if page_title and not request.is_ajax %}
<h2>{{page_title|safe}}</h2>
{% endif %}
{% block content %}{% endblock %}
</div>
<div class="modal fade" id="modal" role="dialog" tabindex=-1></div>
<script>
Date.prototype.getISOString = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1] ? mm : "0" + mm[0]) + '-' + (dd[1] ? dd : "0" + dd[0]); // padding
};
</script>
<script src="{% static "js/jquery.cookie.js" %}"></script>
<script src="{% static "js/alert.js" %}"></script>
<script src="{% static "js/collapse.js" %}"></script>
<script>
$('.navbar-collapse').addClass('collapse')
</script>
<script src="{% static "js/dropdown.js" %}"></script>
<script src="{% static "js/modal.js" %}"></script>
<script src="{% static "js/konami.js" %}"></script>
<script src="{% static "js/marked.min.js" %}"></script>
<script>
jQuery(document).ready(function () {
jQuery(document).on('click', '.modal-href', function (e) {
$link = jQuery(this);
// Anti modal inception
if ($link.parents('#modal').length == 0) {
e.preventDefault();
modaltarget = $link.data('target');
modalobject = "";
jQuery('#modal').load($link.attr('href'), function (e) {
jQuery('#modal').modal();
});
}
});
<script src="{% static 'js/base.js' %}"></script>
<script src="{% static 'js/marked.min.js' %}"></script>
{% include 'partials/dark_theme.html' %}
var easter_egg = new Konami();
easter_egg.code = function () {
var s = document.createElement('script');
s.type = 'text/javascript';
document.body.appendChild(s);
s.src = '{% static "js/asteroids.min.js"%}';
ga('send', 'event', 'easter_egg', 'activated');
}
easter_egg.load();
});
</script>
<script src="{% static "js/tooltip.js" %}"></script>
{% block js %}
{% endblock %}
</body>

View File

@@ -1,8 +1,10 @@
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">{% block title %}{% endblock %}</h4>
<h4 class="modal-title">{{page_title|safe}}{% block title %}{% endblock %}</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{% block content %}{% endblock %}

View File

@@ -1,39 +0,0 @@
{% extends 'base.html' %}
{% block extrahead %}
<meta name="google" content="notranslate">
{% endblock %}
{% block titleheader %}
<a class="nav navbar-brand navbar-left" href="/"><i class="glyphicon glyphicon-circle-arrow-left" style="vertical-align: middle !important;"></i> RIGS</a>
<a class="nav navbar-brand" href="{% url 'asset_index' %}">Assets</a>
{% endblock %}
{% block titleelements %}
{# % if perms.assets.view_asset % #}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Assets<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{% url 'asset_list' %}"><span class="glyphicon glyphicon-list"></span> List Assets</a></li>
{% if perms.assets.add_asset %}
<li><a href="{% url 'asset_create' %}"><span class="glyphicon glyphicon-plus"></span> Create Asset</a></li>
{% endif %}
</ul>
</li>
{# % endif % #}
{# % if perms.assets.view_supplier % #}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> Suppliers<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{% url 'supplier_list' %}"><span class="glyphicon glyphicon-list"></span>
List Suppliers</a></li>
{% if perms.assets.add_supplier %}
<li><a href="{% url 'supplier_create' %}"><span class="glyphicon glyphicon-plus"></span> Create Supplier</a></li>
{% endif %}
</ul>
</li>
{# % endif % #}
{% if perms.assets.view_asset %}
<li><a href="{% url 'asset_activity_table' %}">Recent Changes</a></li>
{% endif %}
{% endblock %}

View File

@@ -1,75 +1,10 @@
{% load static from staticfiles %}
{% load raven %}
{% extends 'base.html' %}
<!DOCTYPE html>
<html
dir="{% if LANGUAGE_BIDI %}rtl{% else %}ltr{% endif %}"
xml:lang="{% firstof LANGUAGE_CODE 'en' %}"
lang="{% firstof LANGUAGE_CODE 'en' %}">
<head>
<title>{% block title %}{% endblock %} | Rig Information Gathering System</title>
<meta name="viewport" content="initial-scale=1">
<link rel="icon" type="image/png" href="{% static "imgs/pyrigs-avatar.png" %}">
<link rel="apple-touch-icon" href="{% static "imgs/pyrigs-avatar.png" %}">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400italic,700,300,400' rel='stylesheet'
type='text/css'>
<link rel="stylesheet" type="text/css" href="{% static "css/screen.css" %}">
{% block css %}
{% endblock %}
<script src="https://code.jquery.com/jquery-1.8.3.min.js"
integrity="sha256-YcbK69I5IXQftf/mYD8WY0/KmEDCv1asggHpJk1trM8=" crossorigin="anonymous"></script>
<script src="https://cdn.ravenjs.com/1.3.0/jquery,native/raven.min.js"></script>
<script>Raven.config('{% sentry_public_dsn %}').install()</script>
{% block preload_js %}
{% endblock %}
{% block extra-head %}{% endblock %}
</head>
<body>
{% include "analytics.html" %}
<div class="navbar navbar-fixed-top navbar-inverse hidden-print" role="navigation">
<div class="container">
<div class="navbar-header">
<span class="navbar-brand">RIGS</span>
</div>
</div>
{% block titleheader %}
<div class="navbar-header">
<span class="navbar-brand">RIGS</span>
</div>
<div class="container">
<div id="content" class="row">
{% block content-header %}
{% if error %}
<div class="error">{{ error }}</div>{% endif %}
{% if info %}
<div class="info">{{ info }}</div>{% endif %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.level_tag }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endblock %}
{% block content %}{% endblock %}
</div>
<div id="sidebar" class="column">
{% block sidebar %}
{% endblock %}
</div>
</div>
<div class="modal fade" id="modal" role="dialog" tabindex=-1></div>
{% endblock %}
<div class="modal fade" id="loading-modal" role="dialog">
<div class="modal-dialog">
@@ -78,48 +13,10 @@
<h2>Please wait</h2>
</div>
<div class="modal-body">
<div class="loading-animation">
<div class="circle"></div>
<div class="circle1"></div>
<div class="spinner-border text-primary" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
</div>
</div>
<script>
Date.prototype.getISOString = function () {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1] ? mm : "0" + mm[0]) + '-' + (dd[1] ? dd : "0" + dd[0]); // padding
};
</script>
<script src="{% static "js/jquery.cookie.js" %}"></script>
<script src="{% static "js/alert.js" %}"></script>
<script src="{% static "js/collapse.js" %}"></script>
<script>
$('.navbar-collapse').addClass('collapse')
</script>
<script src="{% static "js/dropdown.js" %}"></script>
<script src="{% static "js/modal.js" %}"></script>
<script>
jQuery(document).ready(function () {
jQuery(document).on('click', '.modal-href', function (e) {
$link = jQuery(this);
// Anti modal inception
if ($link.parents('#modal').length == 0) {
e.preventDefault();
modaltarget = $link.data('target');
modalobject = "";
jQuery('#modal').load($link.attr('href'), function (e) {
jQuery('#modal').modal();
});
}
});
});
</script>
{% block js %}
{% endblock %}
</body>
</html>

View File

@@ -1,17 +1,11 @@
{% load static from staticfiles %}
{% load raven %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<table class="main-table">
<tr class="client-header">
<td align="center">
@@ -32,7 +26,7 @@
<!--[if mso]>
</td></tr></table>
</center>
<![endif]-->
<![endif]-->
</td>
</tr>
<tr>
@@ -47,12 +41,9 @@
<!--[if mso]>
</td></tr></table>
</center>
<![endif]-->
<![endif]-->
</td>
</tr>
</table>
</body>
</html>

View File

@@ -1,5 +1,4 @@
{% load static from staticfiles %}
{% load raven %}
{% load static %}
<!DOCTYPE html>
<html
@@ -8,24 +7,15 @@
lang="{% firstof LANGUAGE_CODE 'en' %}"
class="embedded">
<head>
<base target="_blank" />
<!-- Open all links in a new tab, not in the iframe -->
<base target="_blank" /><!-- Open all links in a new tab, not in the iframe -->
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400italic,700,300,400' rel='stylesheet'
type='text/css'>
<link rel="stylesheet" type="text/css" href="{% static "css/screen.css" %}">
<script src="https://code.jquery.com/jquery-1.8.3.min.js"
integrity="sha256-YcbK69I5IXQftf/mYD8WY0/KmEDCv1asggHpJk1trM8=" crossorigin="anonymous"></script>
<script src="https://cdn.ravenjs.com/1.3.0/jquery,native/raven.min.js"></script>
<script>Raven.config('{% sentry_public_dsn %}').install()</script>
<meta name="color-scheme" content="light dark">
<link rel="stylesheet" type="text/css" href="{% static 'css/screen.css' %}">
</head>
<body>
{% include "analytics.html" %}
<div class="embed_container">
<div class="container-fluid">
{% if messages %}
@@ -37,12 +27,12 @@
</div>
{% endfor %}
{% endif %}
<a href="/"><span class="source"> R<small>ig</small> I<small>nformation</small> G<small>athering</small> S<small>ystem</small></span></a>
{% block content %}
{% endblock %}
</div>
</div>
{% include 'partials/dark_theme.html' %}
{% block js %}
{% endblock %}
</body>

View File

@@ -1,54 +0,0 @@
{% extends 'base.html' %}
{% block titleheader %}
<a class="navbar-brand" href="/">RIGS</a>
{% endblock %}
{% block titleelements %}
{% if user.is_authenticated %}
<li><a href="/">Home</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Rigboard<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{% url 'rigboard' %}"><span class="glyphicon glyphicon-list"></span>
Rigboard</a></li>
<li><a href="{% url 'event_archive' %}"><span class="glyphicon glyphicon-book"></span>
Archive</a></li>
<li><a href="{% url 'web_calendar' %}"><span class="glyphicon glyphicon-calendar"></span>
Calendar</a></li>
{% if perms.RIGS.view_event %}
<li><a href="{% url 'activity_table' %}"><span
class="glyphicon glyphicon-random"></span> Recent Changes</a></li>
{% endif %}
{% if perms.RIGS.add_event %}
<li><a href="{% url 'event_create' %}"><span class="glyphicon glyphicon-plus"></span>
New Event</a></li>
{% endif %}
</ul>
</li>
{% endif %}
{% if perms.RIGS.view_invoice %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Invoices<b class="caret"></b></a>
<ul class="dropdown-menu">
{% if perms.RIGS.add_invoice %}
<li><a href="{% url 'invoice_waiting' %}"><span
class="glyphicon glyphicon-briefcase text-danger"></span> Waiting</a></li>
{% endif %}
<li><a href="{% url 'invoice_list' %}"><span class="glyphicon glyphicon-gbp text-warning"></span> Outstanding</a>
</li>
<li><a href="{% url 'invoice_archive' %}"><span class="glyphicon glyphicon-book"></span>
Archive</a></li>
</ul>
</li>
{% endif %}
{% if perms.RIGS.view_person %}
<li><a href="{% url 'person_list' %}">People</a></li>
{% endif %}
{% if perms.RIGS.view_organisation %}
<li><a href="{% url 'organisation_list' %}">Organisations</a></li>
{% endif %}
{% if perms.RIGS.view_venue %}
<li><a href="{% url 'venue_list' %}">Venues</a></li>
{% endif %}
{% endblock %}

2739
templates/bootstrap.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,15 @@
{% if form.errors %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<dl class="dl-horizontal">
<dl>
{% with form|nice_errors as qq %}
{% for error_name,desc in qq.items %}
<span>
<dt>{{error_name}}</dt>
<dd>{{desc}}</dd>
</span>
<span class="row">
<dt class="col-4">{{error_name}}</dt>
<dd class="col-8">{{desc}}</dd>
</span>
{% endfor %}
{% endwith %}
</dl>
</div>
{% endif %}
{% endif %}

View File

@@ -0,0 +1,76 @@
{% extends override|default:"base_rigs.html" %}
{% load widget_tweaks %}
{% load button from filters %}
{% block content %}
<div class="row">
<div class="col">
<div class="card border-info">
<div class="card-header">{{ type }} Details</div>
<div class="card-body">
<dl class="dl-horizontal">
<dt>Name</dt>
<dd>{{ object.name }}</dd>
<dt>Phone</dt>
<dd><a href="tel:{{ object.phone }}">{{ object.phone }}</a></dd>
<dt>Email</dt>
<dd><a href="mailto:{{ object.email }}"><span class="overflow-ellipsis">{{ object.email }}</span></a></dd>
<dt>Address</dt>
<dd>{{ object.address|linebreaksbr }}</dd>
<dt>Notes</dt>
<dd>{{ object.notes|linebreaksbr }}</dd>
{% if object.three_phase_available is not None %}
<dt>Three Phase Available</dt>
<dd>{{ object.three_phase_available|yesno|capfirst }}</dd>
{% endif%}
{% if object.union_account is not None %}
<dt>Union Account</dt>
<dd>{{ object.union_account|yesno|capfirst }}</dd>
{% endif%}
</dl>
</div>
</div>
</div>
{% if associated %}
{% include associated|safe %}
{% endif %}
</div>
{% if associated2 %}
{% include associated2|safe %}
{% endif %}
{% if not request.is_ajax %}
<div class="row py-2">
<div class="col-sm-12 text-right">
{% if can_edit %}
<div class="btn-group">
{% button 'edit' update_link object.pk %}
</div>
{% endif %}
{% include 'partials/last_edited.html' with target=history_link %}
</div>
</div>
{% endif %}
{% endblock %}
{% if request.is_ajax %}
{% block footer %}
<div class="row py-2">
<div class="col-sm-12 text-right">
<div class="btn-group btn-page">
<a href="{% url detail_link object.pk %}" class="btn btn-primary"><span
class="fas fa-eye"></span> Open Page</a>
{% if can_edit %}
{% button 'edit' update_link object.pk %}
{% endif %}
</div>
{% include 'partials/last_edited.html' with target=history_link %}
</div>
</div>
{% endblock %}
{% endif %}

View File

@@ -0,0 +1,78 @@
{% extends override|default:"base_rigs.html" %}
{% load button from filters %}
{% load widget_tweaks %}
{% block content %}
<div class="col">
<form action="{{ form.action|default:request.path }}" method="post">{% csrf_token %}
<div class="row">
<div class="col-md-6">
{% include 'form_errors.html' %}
<div class="form-group form-row">
<label for="{{ form.name.id_for_label }}"
class="col-sm-2 control-label">{{ form.name.label }}</label>
<div class="col-sm-10">
{% render_field form.name class+="form-control" placeholder=form.name.label %}
</div>
</div>
<div class="form-group form-row">
<label for="{{ form.phone.id_for_label }}"
class="col-sm-2 control-label">{{ form.phone.label }}</label>
<div class="col-sm-10">
{% render_field form.phone class+="form-control" type="tel" placeholder=form.phone.label %}
</div>
</div>
<div class="form-group form-row">
<label for="{{ form.email.id_for_label }}"
class="col-sm-2 control-label">{{ form.email.label }}</label>
<div class="col-sm-10">
{% render_field form.email class+="form-control" type="email" placeholder=form.email.label %}
</div>
</div>
<div class="form-group form-row">
<label for="{{ form.address.id_for_label }}"
class="col-sm-2 control-label">{{ form.address.label }}</label>
<div class="col-sm-10">
{% render_field form.address class+="form-control" placeholder=form.address.label %}
</div>
</div>
</div>
<div class="col-sm-6">
<div class="form-group form-row">
<label for="{{ form.notes.id_for_label }}"
class="col-sm-2 control-label">{{ form.notes.label }}</label>
<div class="col-sm-10">
{% render_field form.notes class+="form-control" placeholder=form.notes.label %}
</div>
</div>
{% if form.three_phase_available is not None %}
<div class="form-group form-row">
<div class="col-sm-10 col-sm-offset-2">
<div class="checkbox">
<label>
{% render_field form.three_phase_available %} {{ form.three_phase_available.label }}
</label>
</div>
</div>
</div>
{% endif %}
{% if form.union_account is not None %}
<div class="form-group form-row">
<div class="col-sm-10 col-sm-offset-2">
<div class="checkbox">
<label>
{% render_field form.union_account %} {{ form.union_account.label }}
</label>
</div>
</div>
</div>
{% endif %}
</div>
</div>
<div class="form-group text-right">
{% button 'submit' %}
</div>
</form>
</div>
{% endblock %}

View File

@@ -0,0 +1,61 @@
{% extends override|default:"base_rigs.html" %}
{% load url_replace from filters %}
{% load orderby from filters %}
{% load paginator from filters %}
{% load linkornone from filters %}
{% load button from filters %}
{% block content %}
{% include 'partials/list_search.html' %}
<div class="row py-3">
<div class="col text-right">
{% button 'new' url=create %}
</div>
</div>
<div class="row">
<div class="col">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Name<a href="?{% orderby request 'orderBy' 'name' %}"><span class="caret"></span></a></th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th scope="col">Notes</th>
{% if union_account %} {#TODO#}
<th scope="col">Union Account</th>
{% endif %}
<th scope="col">Quick Links</th>
</tr>
</thead>
<tbody>
{% for object in object_list %}
<tr id="row_item">
<th scope="row" class="align-middle" id="cell_name">{{ object.name }}</th>
<td class="align-middle">{{ object.email|linkornone:'mailto' }}</td>
<td class="align-middle">{{ object.phone|linkornone:'tel' }}</td>
<td class="align-middle">{{ object.notes|yesno|capfirst }}</td>
{% if union_account %}
<td>{{ object.union_account|yesno|capfirst }}</td>
{% endif %}
<td>
<div class="btn-group d-flex" role="group">
{% button 'view' url=detail pk=object.pk clazz="btn-sm modal-href" %}
{% if can_edit %}
{% button 'edit' url=edit pk=object.pk clazz="btn-sm modal-href" %}
{% endif %}
</div>
</td>
</tr>
{% empty %}
<tr class="table-warning">
<td colspan="6" class="text-center">Nothing found</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% paginator %}
{% endblock%}

47
templates/index.html Normal file
View File

@@ -0,0 +1,47 @@
{% extends 'base_rigs.html' %}
{% load humanize %}
{% block title %}RIGS{% endblock %}
{% block content %}
<div class="row">
<h1 class="col-sm-12 pb-3">R<small class="text-muted">ig</small> I<small class="text-muted">nformation</small> G<small class="text-muted">athering</small> S<small class="text-muted">ystem</small></h1>
<h2 class="col-sm-12 pb-3">Welcome back {{ user.get_full_name }}, there {%if rig_count == 1 %}is one rig coming up{%else%}are {{ rig_count|apnumber }} rigs coming up.{%endif%}</h2>
<div class="col-sm mb-3">
<div class="card">
<h4 class="card-header">Rigboard</h4>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="{% url 'rigboard' %}"><span class="fas fa-list align-middle"></span><span class="align-middle"> Rigboard</span></a>
<a class="list-group-item list-group-item-action" href="{% url 'web_calendar' %}"><span class="fas fa-calendar align-middle"></span><span class="align-middle"> Calendar</span></a>
{% if perms.RIGS.add_event %}
<a class="list-group-item list-group-item-action" href="{% url 'event_create' %}"><span class="fas fa-plus align-middle"></span><span class="align-middle"> New Event</span></a>
{% endif %}
</div>
<h4 class="card-header">Asset Database</h4>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="{% url 'asset_index' %}"><span class="fas fa-tag align-middle"></span><span class="align-middle"> Asset List</span></a>
{% if perms.assets.add_asset %}
<a class="list-group-item list-group-item-action" href="{% url 'asset_create' %}"><span class="fas fa-plus align-middle"></span><span class="align-middle"> New Asset</span></a>
{% endif %}
<a class="list-group-item list-group-item-action" href="{% url 'supplier_list' %}"><span class="fas fa-parachute-box align-middle"></span><span class="align-middle"> Supplier List</span></a>
{% if perms.assets.add_supplier %}
<a class="list-group-item list-group-item-action" href="{% url 'supplier_create' %}"><span class="fas fa-plus align-middle"></span><span class="align-middle"> New Supplier</span></a>
{% endif %}
</div>
<h4 class="card-header">Quick Links</h4>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="https://forum.nottinghamtec.co.uk" target="_blank" rel="noopener noreferrer"><span class="fas fa-comment-alt text-info align-middle"></span><span class="align-middle"> TEC Forum</span></a>
<a class="list-group-item list-group-item-action" href="//wiki.nottinghamtec.co.uk" target="_blank" rel="noopener noreferrer"><span class="fas fa-pen-square align-middle"></span><span class="align-middle"> TEC Wiki</span></a>
{% if perms.RIGS.view_event %}
<a class="list-group-item list-group-item-action" href="//members.nottinghamtec.co.uk/price" target="_blank" rel="noopener noreferrer"><span class="fas fa-pound-sign text-warning align-middle"></span><span class="align-middle"> Price List</span></a>
{% endif %}
</div>
</div>
</div>
{% if perms.RIGS.view_event %}
<div class="col-sm">
{% include 'activity_feed.html' %}
</div>
{% endif %}
</div><!---end row--->
{% endblock %}

View File

@@ -1,5 +1,5 @@
{% extends 'base_rigs.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}Login Required{% endblock %}
{% block js %}

View File

@@ -1,36 +1,42 @@
{% load url_replace from filters %}
{% if is_paginated %}
{% load url_replace from filters %}
<div>
<ul class="pagination">
{% if has_previous %}
<li><a href="?{% url_replace request 'page' previous %}" class="prev">&lsaquo;&lsaquo;</a></li>
{% else %}
<li class="disabled prev"><a href="#">&lsaquo;&lsaquo;</a></li>
{% endif %}
<div class="row justify-content-center pt-3">
<nav>
<ul class="pagination">
{% if has_previous %}
<li class="page-item"><a class="page-link" href="?{% url_replace request 'page' previous %}">&lsaquo;&lsaquo;</a></li>
{% else %}
<li class="page-item disabled">
<span class="page-link" aria-hidden="true">&lsaquo;&lsaquo;</span>
</li>
{% endif %}
{% if show_first %}
<li><a href="?{% url_replace request 'page' first %}" class="prev">{{ first }}</a></li>
<li><span>&hellip;</span></li>
<li class="page-item"><a class="page-link" href="?{% url_replace request 'page' first %}" class="prev">{{ first }}</a></li>
<li class="page-item disabled"><span class="page-link">&hellip;</span></li>
{% endif %}
{% for page in page_numbers %}
{% ifequal page page_obj.number %}
<li class="current page active"><a href="#">{{ page }}</a></li>
<li class="page-item active"><a class="page-link" href="#">{{ page }}</a></li>
{% else %}
<li><a href="?{% url_replace request 'page' page %}" class="page">{{ page }}</a></li>
<li class="page-item"><a class="page-link" href="?{% url_replace request 'page' page %}" class="page">{{ page }}</a></li>
{% endifequal %}
{% endfor %}
{% if show_last %}
<li><span>&hellip;</span></li>
<li><a href="?{% url_replace request 'page' last %}" class="prev">{{ last }}</a></li>
<li class="page-item disabled"><span class="page-link">&hellip;</span></li>
<li class="page-item"><a class="page-link" href="?{% url_replace request 'page' last %}" class="prev">{{ last }}</a></li>
{% endif %}
{% if has_next %}
<li><a href="?{% url_replace request 'page' next %}" class="next">&rsaquo;&rsaquo;</a></li>
<li class="page-item"><a class="page-link" href="?{% url_replace request 'page' next %}" class="next">&rsaquo;&rsaquo;</a></li>
{% else %}
<li class="disabled next"><a href="#">&rsaquo;&rsaquo;</a></li>
<li class="page-item disabled">
<span class="page-link" aria-hidden="true">&rsaquo;&rsaquo;</span>
</li>
{% endif %}
</ul>
</div>
{% endif %}
</ul>
</nav>
</div>
{% endif %}

View File

@@ -0,0 +1,10 @@
<div class="col-sm">
<div class="card">
<div class="card-header">Associated Organisations</div>
<ul class="list-group list-group-flush">
{% for organisation,count in object.organisations %}
<a class="list-group-item list-group-item-action" href="{% url 'organisation_detail' organisation.pk %}">{{ organisation.pk|stringformat:"05d" }} | {{ organisation.name }} <span class="badge badge-secondary" title="{{count}} events with {{object.name}} for {{organisation.name}}">{{count}}</span></a>
{% endfor %}
</ul>
</div>
</div>

View File

@@ -0,0 +1,9 @@
{% if submit %}
<button type="submit" class="btn {{ class }}" title="{{ text }}" {% if id %}id="{{id}}"{%endif%} {% if style %}style="{{style}}"{%endif%}><span class="fas {{ icon }} align-middle"></span> <span class="d-none d-sm-inline align-middle">{{ text }}</span></button>
{% elif pk %}
<a href="{% url target pk %}" class="btn {{ class }}" {% if id %}id="{{id}}"{%endif%} {% if style %}style="{{style}}"{%endif%} {% if text == 'Print' %}target="_blank"{%endif%}><span class="fas {{ icon }} align-middle"></span> <span class="d-none d-sm-inline align-middle">{{ text }}</span></a>
{% elif copy %}
<button class="btn btn-secondary btn-sm mr-1" data-clipboard-target="{{id}}" data-content="Copied to clipboard!"><span class="fas fa-copy"></span></button>
{% else %}
<a href="{% url target %}" class="btn {{ class }}" {% if id %}id="{{id}}"{%endif%} {% if style %}style="{{style}}"{%endif%}><span class="fas {{ icon }} align-middle"></span> <span class="d-none d-sm-inline align-middle">{{ text }}</span></a>
{% endif %}

View File

@@ -0,0 +1,7 @@
{% load static %}
<script>
if({{ request.user.dark_theme|lower|default:'false' }} || window.matchMedia('(prefers-color-scheme: dark)').matches) {
$('<link>').prependTo('head').attr({type : 'text/css', rel : 'stylesheet'}).attr('href', '{% static "css/dark_screen.css" %}');
document.body.setAttribute('data-theme', 'dark');
}
</script>

View File

@@ -0,0 +1,34 @@
{% load static %}
<script>
function initDatetime() {
$('input[type=datetime-local]').not(':disabled').flatpickr({
dateFormat: 'Y-m-dTH:m',
enableTime: true,
allowInput: true,
altInput: true,
altFormat: "d/m/y H:m",
});
}
$(document).ready(function () {
function supportsDateTime() {
var input = document.createElement('input');
input.setAttribute('type','datetime-local');
return input.type !== "text";
}
//Firefox reports support for datetime-local without properly supporting it. Bah.
if(!supportsDateTime() || navigator.userAgent.toLowerCase().indexOf('firefox') > -1){
$('<link>')
.appendTo('head')
.attr({type : 'text/css', rel : 'stylesheet'})
.attr('href', '{% static "css/flatpickr.css" %}');
$.when(
$.getScript( '{% static "js/flatpickr.min.js" %}' ),
$.Deferred(function(deferred){
$(deferred.resolve);
})
).done(function(){
initDatetime();
});
}
});
</script>

View File

@@ -0,0 +1,13 @@
{% load button from filters %}
<div class="row">
<div class="col">
<form class="form-inline justify-content-end">
{% csrf_token %}
<div class="input-group">
<input type="search" name="q" placeholder="Search" value="{{ request.GET.q }}"
class="form-control" id="id_search_text"/>
<span class="input-group-append">{% button 'search' id="id_search" %}</span>
</div>
</form>
</div>
</div>

View File

@@ -0,0 +1,38 @@
{% if user.is_authenticated %}
<form id="searchForm" class="form-inline flex-nowrap mx-md-3 px-2 border border-light rounded w-75" role="form" method="GET" action="{% url 'event_archive' %}">
<div class="input-group input-group-sm flex-nowrap">
<div class="input-group-prepend">
<input id="id_search_input" type="search" name="q" class="form-control form-control-sm" placeholder="Search..." value="{{ request.GET.q }}" />
</div>
<select id="search-options" class="custom-select form-control" style="border-top-right-radius: 0px; border-bottom-right-radius: 0px; width: 15ch;">
<option selected data-action="{% url 'event_archive' %}" href="#">Events</option>
<option data-action="{% url 'person_list' %}" href="#">People</option>
<option data-action="{% url 'organisation_list' %}" href="#">Organisations</option>
<option data-action="{% url 'venue_list' %}" href="#">Venues</option>
{% if perms.RIGS.view_invoice %}
<option data-action="{% url 'invoice_archive' %}" href="#">Invoices</option>
{% endif %}
<option data-action="{% url 'asset_list' %}" href="#">Assets</option>
<option data-action="{% url 'supplier_list' %}" href="#">Suppliers</option>
</select>
</div>
<button class="btn btn-info form-control form-control-sm btn-sm w-25" style="border-top-left-radius: 0px;border-bottom-left-radius: 0px;"><span class="fas fa-search"></span><span class="sr-only"> Search</span></button>
<a href="{% url 'search_help' %}" class="nav-link modal-href ml-1"><span class="fas fa-question-circle"></span></a>
</form>
{% endif %}
{% block js %}
<script>
$('#search-options').change(function(){
$('#searchForm').attr('action', $(this).children('option:selected').data('action'));
});
$(document).ready(function(){
$('#id_search_input').keypress(function (e) {
if (e.which == 13) {
$('#searchForm').attr('action', $('#search-options option').first().data('action')).submit();
return false;
}
});
});
</script>
{% endblock %}

View File

@@ -5,6 +5,6 @@
{% block content %}
<div class="alert alert-success">
<h2>Activation Complete</h2>
<p>You user account is now fully registered. Enjoy RIGS</p>
<p>Your user account is now awaiting administrator approval. Won't be long!</p>
</div>
{% endblock %}
{% endblock %}

View File

@@ -7,4 +7,4 @@
<h1>R<small>ig</small> I<small>nformation</small> G<small>athering</small> S<small>ystem</small></h1>
</div>
{% include 'registration/loginform.html' %}
{% endblock %}
{% endblock %}

View File

@@ -1,8 +1,6 @@
{% load widget_tweaks %}
{% include 'form_errors.html' %}
<div class="col-sm-6 col-sm-offset-3 col-lg-4 col-lg-offset-4">
<div class="col-sm-6 offset-sm-3 col-lg-4 offset-lg-4">
<form action="{% url 'login' %}" method="post" role="form" target="_self">{% csrf_token %}
<div class="form-group">
<label for="id_username">{{ form.username.label }}</label>

View File

@@ -1,33 +1,32 @@
{% extends "base_rigs.html" %}
{% load widget_tweaks %}
{% block title %}Change Password{% endblock %}
{% block content %}
<div class="col-sm-10 col-sm-offset-1">
<h3>Change Password</h3>
{% if form.errors or supplement_form.errors %}
<div class="alert alert-danger">
Please correct the error(s) below.
{{form.errors}}
{{supplement_form.errors}}
</div>
{% endif %}
<p>Please enter your old password, for security's sake, and then enter your new password twice, so we can verify you typed it in correctly.</p>
<div class="col-sm-10 col-sm-offset-1">
<h3>Change Password</h3>
{% if form.errors or supplement_form.errors %}
<div class="alert alert-danger">
Please correct the error(s) below.
{{form.errors}}
{{supplement_form.errors}}
</div>
{% endif %}
<p>Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly.</p>
<div class="col-sm-8 col-sm-offset-2">
<form action="" method="post" class="form-horizontal" role="form">{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}" class="control-label col-sm-4">{{ field.label }}</label>
<div class="controls col-sm-8">
{% render_field field class+="form-control" placeholder=field.label %}
</div>
</div>
{% endfor %}
<p><input type="submit" value="Change Password" class="btn btn-primary pull-right"></p>
</form>
<div class="col-sm-8 col-sm-offset-2">
<form action="" method="post" class="" role="form">{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}" class="col-form-label col-sm-4">{{ field.label }}</label>
<div class="controls col-sm-8">
{% render_field field class+="form-control" placeholder=field.label %}
</div>
</div>
{% endfor %}
<p><input type="submit" value="Change Password" class="btn btn-primary pull-right"></p>
</form>
</div>
</div>
{% endblock %}

View File

@@ -22,18 +22,18 @@
<p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
<div class="col-sm-8 col-sm-offset-2 well">
<form action="" method="post" role="form" class="form-horizontal">{% csrf_token %}
<form action="" method="post" role="form" class="">{% csrf_token %}
{% if form.errors %}
{% include 'form_errors.html' %}
{% endif %}
<div class="form-group">
<label for="{{form.new_password1.id_for_label}}" class="col-sm-4 control-label">{{form.new_password1.label}}</label>
<label for="{{form.new_password1.id_for_label}}" class="col-sm-4 col-form-label">{{form.new_password1.label}}</label>
<div class="col-sm-8">
{% render_field form.new_password1 class+="form-control" %}
</div>
</div>
<div class="form-group">
<label for="{{form.new_password2.id_for_label}}" class="col-sm-4 control-label">{{form.new_password2.label}}</label>
<label for="{{form.new_password2.id_for_label}}" class="col-sm-4 col-form-label">{{form.new_password2.label}}</label>
<div class="col-sm-8">
{% render_field form.new_password2 class+="form-control" %}
</div>

View File

@@ -11,12 +11,12 @@
<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
<div class="col-sm-8 col-sm-offset-2 well">
<form action="" method="POST" role="form" class="form-horizontal">{% csrf_token %}
<form action="" method="POST" role="form" class="">{% csrf_token %}
{% if form.errors %}
{% include 'form_errors.html' %}
{% endif %}
<div class="form-group">
<label for="{{form.email.id_for_label}}" class="col-sm-2 control-label">{{form.email.label}}</label>
<label for="{{form.email.id_for_label}}" class="col-sm-2 col-form-label">{{form.email.label}}</label>
<div class="col-sm-10">
{% render_field form.email type="email" class+="form-control" %}
</div>

View File

@@ -1,29 +1,36 @@
{% extends 'base_rigs.html' %}
{% load widget_tweaks %}
{% load static %}
{% block title %}Registration{% endblock %}
{% block content %}
<div class="col-sm-10 col-sm-offset-1">
<h3>New User Registration</h3>
{% if form.errors or supplement_form.errors %}
<div class="alert alert-danger">
{{form.errors}}
{{supplement_form.errors}}
</div>
{% endif %}
<div class="col-sm-8 col-sm-offset-2">
<form action="" method="post" class="form-horizontal" role="form">{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="{{ field.id_for_label }}" class="control-label col-sm-4">{{ field.label }}</label>
<div class="controls col-sm-8">
{% render_field field class+="form-control" placeholder=field.label %}
</div>
</div>
{% endfor %}
<p><input type="submit" value="Register" class="btn btn-primary pull-right"></p>
</form>
<div style="background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url({% static 'imgs/wof2014-1-small.jpg' %}); background-repeat: no-repeat; background-size: cover; width: 100vw; height: 100vh; position: relative; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; margin-top: -24px; padding-top: 24px;">
<div class="container">
<div class="card">
<h3 class="card-header">New User Registration</h3>
<div class="card-body">
{% if form.errors or supplement_form.errors %}
<div class="alert alert-danger">
{{form.errors}}
{{supplement_form.errors}}
</div>
{% endif %}
<div class="col-sm-8 col-sm-offset-2">
<form method="post" role="form">{% csrf_token %}
{% for field in form %}
<div class="form-group form-row">
<label for="{{ field.id_for_label }}" class="col-form-label col-sm-4">{{ field.label }}</label>
<div class="controls col-sm-8">
{% render_field field class+="form-control" placeholder=field.label %}
</div>
</div>
{% endfor %}
<p><input type="submit" value="Register" class="btn btn-primary pull-right"></p>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}

2
templates/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow: /

View File

@@ -0,0 +1,75 @@
{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
{% block title %}Search Help{% endblock %}
{% block content %}
<div class="row">
{% if not request.is_ajax %}
<div class="col-sm-12">
<h1>Search Help</h1>
</div>
{% endif %}
<div class="col-sm-12">
<div class="card card-default">
<div class="card-header">
<h3 class="card-title">Searching Events</h3>
</div>
<div class="card-body">
<p>
Searches for entire query in:
<span class="badge badge-dark">name</span>
<span class="badge badge-dark">description</span> and
<span class="badge badge-dark">notes</span>
</p>
<p>You can search for an event by <span class="badge badge-dark">event_id</span> by entering an integer, or using the format <code>N01234</code></p>
<p>On the search results page you can also specify the date range for the <span class="badge badge-dark">start_date</span> of the event</p>
<p>Events are sorted in reverse <span class="badge badge-dark">start_date</span> order (most recent events at the top)</p>
</div>
<div class="card-header">
<h3 class="card-title">Searching People/Organisations/Venues/Suppliers</h3>
</div>
<div class="card-body">
<p>
Searches for entire search phrase in:
<span class="badge badge-dark">name</span>
<span class="badge badge-dark">email</span>
<span class="badge badge-dark">address</span>
<span class="badge badge-dark">notes</span> and
<span class="badge badge-dark">phone</span>
</p>
<p>You can search for an entry by <span class="badge badge-dark">id</span> by entering an integer</p>
<p>Entries are sorted in alphabetical order by <span class="badge badge-dark">name</span></p>
</div>
{% if perms.RIGS.view_invoice %}
<div class="card-header">
<h3 class="card-title">Searching Invoices</h3>
</div>
<div class="card-body">
<p>
Searches for entire search phrase in:
<span class="badge badge-dark">event__name</span>
</p>
<p>You can search for an event's invoice by entering the <span class="badge badge-dark">event_id</span> using the format <code>N01234</code></p>
<p>You can search for an invoice by <span class="badge badge-dark">invoice_id</span> using the format <code>#01234</code></p>
<p>Entering a raw integer will search by both <span class="badge badge-dark">invoice_id</span> and <span class="badge badge-dark">event_id</span></p>
<p>Entries are sorted in reverse <span class="badge badge-dark">invoice_date</span> order</p>
</div>
{% endif %}
<div class="card-header">
<h3 class="card-title">Searching Assets</h3>
</div>
<div class="card-body">
<p>
Searches for entire search phrase in:
<span class="badge badge-dark">description</span> and
<span class="badge badge-dark">serial number</span>
</p>
<p>
Will also attempt to exact match <span class="badge badge-dark">asset ID</span>
</p>
<p>Entries are sorted in alphanumerical order by <span class="badge badge-dark">asset ID</span></p>
</div>
</div>
</div>
</div>
{% endblock %}