mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-02-24 15:18:24 +00:00
And now the same for generic forms
This commit is contained in:
@@ -216,7 +216,7 @@ class ErrorPage(Region):
|
|||||||
|
|
||||||
class Modal(Region):
|
class Modal(Region):
|
||||||
_submit_locator = (By.CSS_SELECTOR, '.btn-primary')
|
_submit_locator = (By.CSS_SELECTOR, '.btn-primary')
|
||||||
_header_selector = (By.TAG_NAME, 'h3')
|
_header_selector = (By.TAG_NAME, 'h4')
|
||||||
|
|
||||||
form_items = {
|
form_items = {
|
||||||
'name': (TextBox, (By.ID, 'id_name'))
|
'name': (TextBox, (By.ID, 'id_name'))
|
||||||
|
|||||||
@@ -150,6 +150,20 @@ class SecureAPIRequest(generic.View):
|
|||||||
return HttpResponse(model)
|
return HttpResponse(model)
|
||||||
|
|
||||||
|
|
||||||
|
class ModalURLMixin:
|
||||||
|
def get_close_url(self, update, detail):
|
||||||
|
if self.request.is_ajax():
|
||||||
|
url = reverse_lazy('closemodal')
|
||||||
|
update_url = str(reverse_lazy(update, kwargs={'pk': self.object.pk}))
|
||||||
|
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
||||||
|
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
||||||
|
else:
|
||||||
|
url = reverse_lazy(detail, kwargs={
|
||||||
|
'pk': self.object.pk,
|
||||||
|
})
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
class GenericListView(generic.ListView):
|
class GenericListView(generic.ListView):
|
||||||
template_name = 'generic_list.html'
|
template_name = 'generic_list.html'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -194,6 +208,28 @@ class GenericDetailView(generic.DetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class GenericUpdateView(generic.UpdateView):
|
||||||
|
template_name = "generic_form.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(GenericUpdateView, self).get_context_data(**kwargs)
|
||||||
|
context['page_title'] = "Edit {}".format(self.model.__name__)
|
||||||
|
if self.request.is_ajax():
|
||||||
|
context['override'] = "base_ajax.html"
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class GenericCreateView(generic.CreateView):
|
||||||
|
template_name = "generic_form.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(GenericCreateView, self).get_context_data(**kwargs)
|
||||||
|
context['page_title'] = "Create {}".format(self.model.__name__)
|
||||||
|
if self.request.is_ajax():
|
||||||
|
context['override'] = "base_ajax.html"
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class SearchHelp(generic.TemplateView):
|
class SearchHelp(generic.TemplateView):
|
||||||
template_name = 'search_help.html'
|
template_name = 'search_help.html'
|
||||||
|
|
||||||
|
|||||||
@@ -25,15 +25,15 @@ forms.DateField.widget = forms.DateInput(attrs={'type': 'date'})
|
|||||||
|
|
||||||
class InvoiceIndex(generic.ListView):
|
class InvoiceIndex(generic.ListView):
|
||||||
model = models.Invoice
|
model = models.Invoice
|
||||||
template_name = 'invoice_list_active.html'
|
template_name = 'invoice_list.html'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(InvoiceIndex, self).get_context_data(**kwargs)
|
context = super(InvoiceIndex, self).get_context_data(**kwargs)
|
||||||
total = 0
|
total = 0
|
||||||
for i in context['object_list']:
|
for i in context['object_list']:
|
||||||
total += i.balance
|
total += i.balance
|
||||||
context['total'] = total
|
context['page_title'] = "Outstanding Invoices ({} Events, £{:.2f})".format(len(list(context['object_list'])), total)
|
||||||
context['count'] = len(list(context['object_list']))
|
context['description'] = "Paperwork for these events has been sent to treasury, but the full balance has not yet appeared on a ledger"
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
@@ -130,6 +130,12 @@ class InvoiceArchive(generic.ListView):
|
|||||||
template_name = 'invoice_list_archive.html'
|
template_name = 'invoice_list_archive.html'
|
||||||
paginate_by = 25
|
paginate_by = 25
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(InvoiceArchive, self).get_context_data(**kwargs)
|
||||||
|
context['page_title'] = "Invoice Archive"
|
||||||
|
context['description'] = "This page displays all invoices: outstanding, paid, and void"
|
||||||
|
return context
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
q = self.request.GET.get('q', "")
|
q = self.request.GET.get('q', "")
|
||||||
|
|
||||||
@@ -169,8 +175,7 @@ class InvoiceWaiting(generic.ListView):
|
|||||||
total = 0
|
total = 0
|
||||||
for obj in self.get_objects():
|
for obj in self.get_objects():
|
||||||
total += obj.sum_total
|
total += obj.sum_total
|
||||||
context['total'] = total
|
context['page_title'] = "Events for Invoice ({} Events, £{:.2f})".format(len(self.get_objects()), total)
|
||||||
context['count'] = len(self.get_objects())
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
{% load widget_tweaks %}
|
{% load widget_tweaks %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% load multiply from filters %}
|
{% load multiply from filters %}
|
||||||
|
{% load button from filters %}
|
||||||
|
|
||||||
{% block css %}
|
{% block css %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
@@ -171,11 +172,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 text-right form-hws form-non_rig my-3">
|
<div class="col-sm-12 text-right form-hws form-non_rig my-3">
|
||||||
<div class="btn-group">
|
{% button 'submit' %}
|
||||||
<button type="submit" class="btn btn-primary" title="Save"><i
|
|
||||||
class="fas fa-save"></i> Save
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
{% extends 'base_rigs.html' %}
|
{% extends 'base_rigs.html' %}
|
||||||
{% load paginator from filters %}
|
{% load paginator from filters %}
|
||||||
|
{% load button from filters %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
{% block title %}Invoices{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<h2>{% block heading %}Invoices{% endblock %}</h2>
|
{{ description }}
|
||||||
{% block description %}{% endblock %}
|
|
||||||
{% block search %}{% endblock %}
|
{% block search %}{% endblock %}
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-hover table-bordered table-sm">
|
<table class="table table-hover table-sm">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Invoice #</th>
|
<th scope="col">Invoice #</th>
|
||||||
@@ -51,7 +49,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right">
|
||||||
<a href="{% url 'invoice_detail' invoice.pk %}" class="btn btn-primary"><span class="fas fa-eye"></span></a>
|
{% button 'view' url='invoice_detail' pk=invoice.pk %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{% extends 'invoice_list.html' %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
Outstanding Invoices
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block heading %}
|
|
||||||
Outstanding Invoices ({{ count }} Events, £{{ total|floatformat:2 }})
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block description %}
|
|
||||||
<p>Paperwork for these events has been sent to treasury, but the full balance has not yet appeared on a ledger</p>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,23 +1,7 @@
|
|||||||
{% extends 'invoice_list.html' %}
|
{% extends 'invoice_list.html' %}
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
Invoice Archive
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block heading %}
|
|
||||||
All Invoices
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block description %}
|
|
||||||
<p>This page displays all invoices: outstanding, paid, and void</p>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block search %}
|
{% block search %}
|
||||||
<div class="col-md-6">
|
<div class="py-3">
|
||||||
<form class="form form-horizontal">
|
{% include 'partials/list_search.html' %}
|
||||||
<div class="form-group">
|
|
||||||
<input type="search" name="q" placeholder="Search" value="{{ request.GET.q }}" class="form-control"/>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
{% load paginator from filters %}
|
{% load paginator from filters %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
{% block title %}Events for Invoice{% endblock %}
|
|
||||||
|
|
||||||
{% block js %}
|
{% block js %}
|
||||||
<script src="{% static "js/tooltip.js" %}"></script>
|
<script src="{% static "js/tooltip.js" %}"></script>
|
||||||
<script>
|
<script>
|
||||||
@@ -15,9 +13,8 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<h2>Events for Invoice ({{count}} Events, £{{ total|floatformat:2 }})</h2>
|
|
||||||
<p>These events have happened, but paperwork has not yet been sent to treasury</p>
|
<p>These events have happened, but paperwork has not yet been sent to treasury</p>
|
||||||
<div class="table-responsive col-sm-12">
|
<div class="table-responsive">
|
||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
|
|
||||||
{% load widget_tweaks %}
|
|
||||||
|
|
||||||
{% block title %}{% if object.pk %}Edit {{ object.name }}{% else %}Add Organisation{% endif %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="col-sm-offset-1 col-sm-10">
|
|
||||||
<h3>{{ object.pk|yesno:"Edit,Add" }} Organisation</h3>
|
|
||||||
|
|
||||||
<form action="{{ form.action|default:request.path }}" method="post" class="form-horizontal">{% csrf_token %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6">
|
|
||||||
{% include 'form_errors.html' %}
|
|
||||||
<div class="form-group">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input class="btn btn-primary pull-right" type="submit"/>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
|
|
||||||
{% load widget_tweaks %}
|
|
||||||
|
|
||||||
{% block title %}{% if object.pk %}Edit {{ object.name }}{% else %}Add Person{% endif %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="col-sm-offset-1 col-sm-10">
|
|
||||||
<h3>{{ object.pk|yesno:"Edit,Add" }} Person</h3>
|
|
||||||
|
|
||||||
<form action="{{ form.action|default:request.path }}" method="post" class="form-horizontal">{% csrf_token %}
|
|
||||||
<div class="row">
|
|
||||||
{% include 'form_errors.html' %}
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-group">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input class="btn btn-primary pull-right" type="submit"/>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
{% extends request.is_ajax|yesno:'base_ajax.html,base_rigs.html' %}
|
|
||||||
{% load widget_tweaks %}
|
|
||||||
|
|
||||||
{% block title %}{{ object.pk|yesno:"Edit,Add" }} Venue{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="col-sm-offset-1 col-sm-10">
|
|
||||||
<h3>{{ object.pk|yesno:"Edit,Add" }} Venue</h3>
|
|
||||||
|
|
||||||
<form action="{{ form.action|default:request.path }}" method="post" class="form-horizontal">{% csrf_token %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6">
|
|
||||||
{% include 'form_errors.html' %}
|
|
||||||
<div class="form-group">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<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>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input class="btn btn-primary pull-right" type="submit"/>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -152,7 +152,7 @@ class TestEventCreate(BaseRigboardTest):
|
|||||||
# animation_is_finished doesn't work for whatever reason...
|
# animation_is_finished doesn't work for whatever reason...
|
||||||
self.wait.until(EC.visibility_of_element_located((By.ID, 'modal')))
|
self.wait.until(EC.visibility_of_element_located((By.ID, 'modal')))
|
||||||
self.assertTrue(modal.is_open)
|
self.assertTrue(modal.is_open)
|
||||||
self.assertIn("Add Person", modal.header)
|
self.assertIn("Create Person", modal.header)
|
||||||
|
|
||||||
# Fill person form out and submit
|
# Fill person form out and submit
|
||||||
person_name = "Test Person"
|
person_name = "Test Person"
|
||||||
@@ -171,7 +171,7 @@ class TestEventCreate(BaseRigboardTest):
|
|||||||
modal = self.page.add_person()
|
modal = self.page.add_person()
|
||||||
self.wait.until(EC.visibility_of_element_located((By.ID, 'modal')))
|
self.wait.until(EC.visibility_of_element_located((By.ID, 'modal')))
|
||||||
self.assertTrue(modal.is_open)
|
self.assertTrue(modal.is_open)
|
||||||
self.assertIn("Add Person", modal.header)
|
self.assertIn("Create Person", modal.header)
|
||||||
|
|
||||||
person_name = "Test Person 2"
|
person_name = "Test Person 2"
|
||||||
modal.name = person_name
|
modal.name = person_name
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from RIGS import models, forms
|
|||||||
from assets import models as asset_models
|
from assets import models as asset_models
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
|
|
||||||
from PyRIGS.views import GenericListView, GenericDetailView
|
from PyRIGS.views import GenericListView, GenericDetailView, GenericUpdateView, GenericCreateView, ModalURLMixin
|
||||||
|
|
||||||
|
|
||||||
class PersonList(GenericListView):
|
class PersonList(GenericListView):
|
||||||
@@ -48,40 +48,20 @@ class PersonDetail(GenericDetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class PersonCreate(generic.CreateView):
|
class PersonCreate(GenericCreateView, ModalURLMixin):
|
||||||
template_name = 'person_form.html'
|
|
||||||
model = models.Person
|
model = models.Person
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes']
|
fields = ['name', 'phone', 'email', 'address', 'notes']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('person_update', 'person_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('person_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('person_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
class PersonUpdate(generic.UpdateView):
|
class PersonUpdate(GenericUpdateView, ModalURLMixin):
|
||||||
template_name = 'person_form.html'
|
|
||||||
model = models.Person
|
model = models.Person
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes']
|
fields = ['name', 'phone', 'email', 'address', 'notes']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('person_update', 'person_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('person_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('person_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
class OrganisationList(GenericListView):
|
class OrganisationList(GenericListView):
|
||||||
@@ -109,40 +89,20 @@ class OrganisationDetail(GenericDetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class OrganisationCreate(generic.CreateView):
|
class OrganisationCreate(GenericCreateView, ModalURLMixin):
|
||||||
template_name = 'organisation_form.html'
|
|
||||||
model = models.Organisation
|
model = models.Organisation
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account']
|
fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('organisation_update', 'organisation_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('organisation_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('organisation_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
class OrganisationUpdate(generic.UpdateView):
|
class OrganisationUpdate(GenericUpdateView, ModalURLMixin):
|
||||||
template_name = 'organisation_form.html'
|
|
||||||
model = models.Organisation
|
model = models.Organisation
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account']
|
fields = ['name', 'phone', 'email', 'address', 'notes', 'union_account']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('organisation_update', 'organisation_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('organisation_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('organisation_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
class VenueList(GenericListView):
|
class VenueList(GenericListView):
|
||||||
@@ -168,37 +128,17 @@ class VenueDetail(GenericDetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class VenueCreate(generic.CreateView):
|
class VenueCreate(GenericCreateView, ModalURLMixin):
|
||||||
template_name = 'venue_form.html'
|
|
||||||
model = models.Venue
|
model = models.Venue
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available']
|
fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('venue_update', 'venue_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('venue_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('venue_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
class VenueUpdate(generic.UpdateView):
|
class VenueUpdate(GenericUpdateView, ModalURLMixin):
|
||||||
template_name = 'venue_form.html'
|
|
||||||
model = models.Venue
|
model = models.Venue
|
||||||
fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available']
|
fields = ['name', 'phone', 'email', 'address', 'notes', 'three_phase_available']
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.request.is_ajax():
|
return self.get_close_url('venue_update', 'venue_detail')
|
||||||
url = reverse_lazy('closemodal')
|
|
||||||
update_url = str(reverse_lazy('venue_update', kwargs={'pk': self.object.pk}))
|
|
||||||
messages.info(self.request, "modalobject=" + serializers.serialize("json", [self.object]))
|
|
||||||
messages.info(self.request, "modalobject[0]['update_url']='" + update_url + "'")
|
|
||||||
else:
|
|
||||||
url = reverse_lazy('venue_detail', kwargs={
|
|
||||||
'pk': self.object.pk,
|
|
||||||
})
|
|
||||||
return url
|
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
{% extends 'base_assets.html' %}
|
|
||||||
{% load widget_tweaks %}
|
|
||||||
|
|
||||||
{% block title %}Edit Supplier{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="page-header">
|
|
||||||
<h1>Supplier
|
|
||||||
{% if object %}
|
|
||||||
Edit: {{ object.name }}
|
|
||||||
{% else %}
|
|
||||||
Create
|
|
||||||
{% endif %}</h1>
|
|
||||||
</div>
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
{% include 'form_errors.html' %}
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="{{ form.name.id_for_label }}" class="col-sm-2 control-label">Name</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
{% render_field form.name|add_class:'form-control' value=object.name %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<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">
|
|
||||||
<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">
|
|
||||||
<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 class="form-group">
|
|
||||||
<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>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" class="btn btn-success">Save</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -152,7 +152,7 @@ class SupplierList(BasePage):
|
|||||||
|
|
||||||
|
|
||||||
class SupplierForm(FormPage):
|
class SupplierForm(FormPage):
|
||||||
_submit_locator = (By.CLASS_NAME, 'btn-success')
|
_submit_locator = (By.CLASS_NAME, 'btn-primary')
|
||||||
form_items = {
|
form_items = {
|
||||||
'name': (regions.TextBox, (By.ID, 'id_name')),
|
'name': (regions.TextBox, (By.ID, 'id_name')),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from django.utils.decorators import method_decorator
|
|||||||
from django.views import generic
|
from django.views import generic
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from versioning import versioning
|
from versioning import versioning
|
||||||
from PyRIGS.views import GenericListView, GenericDetailView
|
from PyRIGS.views import GenericListView, GenericDetailView, GenericUpdateView, GenericCreateView, ModalURLMixin
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(csrf_exempt, name='dispatch')
|
@method_decorator(csrf_exempt, name='dispatch')
|
||||||
@@ -249,16 +249,20 @@ class SupplierDetail(GenericDetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class SupplierCreate(generic.CreateView):
|
class SupplierCreate(GenericCreateView, ModalURLMixin):
|
||||||
model = models.Supplier
|
model = models.Supplier
|
||||||
form_class = forms.SupplierForm
|
form_class = forms.SupplierForm
|
||||||
template_name = 'supplier_update.html'
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return self.get_close_url('supplier_update', 'supplier_detail')
|
||||||
|
|
||||||
|
|
||||||
class SupplierUpdate(generic.UpdateView):
|
class SupplierUpdate(GenericUpdateView, ModalURLMixin):
|
||||||
model = models.Supplier
|
model = models.Supplier
|
||||||
form_class = forms.SupplierForm
|
form_class = forms.SupplierForm
|
||||||
template_name = 'supplier_update.html'
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return self.get_close_url('supplier_update', 'supplier_detail')
|
||||||
|
|
||||||
|
|
||||||
class CableTypeList(generic.ListView):
|
class CableTypeList(generic.ListView):
|
||||||
|
|||||||
@@ -70,7 +70,9 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% if page_title and not request.is_ajax %}<h2>{{page_title}}</h2>{% endif %}
|
{% if page_title and not request.is_ajax %}
|
||||||
|
<h2>{{page_title}}</h2>
|
||||||
|
{% endif %}
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
78
templates/generic_form.html
Normal file
78
templates/generic_form.html
Normal 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 %}
|
||||||
@@ -6,18 +6,7 @@
|
|||||||
{% load button from filters %}
|
{% load button from filters %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
{% include 'partials/list_search.html' %}
|
||||||
<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>
|
|
||||||
<div class="row py-3">
|
<div class="row py-3">
|
||||||
<div class="col text-right">
|
<div class="col text-right">
|
||||||
{% button 'new' url=create %}
|
{% button 'new' url=create %}
|
||||||
|
|||||||
13
templates/partials/list_search.html
Normal file
13
templates/partials/list_search.html
Normal 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>
|
||||||
Reference in New Issue
Block a user