Cables can now be created.

This commit is contained in:
Matthew Smith
2019-10-08 01:33:38 +01:00
parent 98b9697366
commit fe1541acbf
5 changed files with 58 additions and 40 deletions

View File

@@ -5,21 +5,25 @@ from assets import models
class AssetForm(forms.ModelForm): class AssetForm(forms.ModelForm):
class Meta:
model = models.Asset
fields = '__all__'
def clean_date_sold(self): def clean_date_sold(self):
if self.cleaned_data["date_sold"] and self.cleaned_data["date_acquired"] > self.cleaned_data["date_sold"]: if self.cleaned_data["date_sold"] and self.cleaned_data["date_acquired"] > self.cleaned_data["date_sold"]:
raise ValidationError("Cannot sell an item before it is acquired") raise ValidationError("Cannot sell an item before it is acquired")
return self.cleaned_data["date_sold"] return self.cleaned_data["date_sold"]
class Meta:
model = models.Asset
fields = '__all__'
widgets = {
'is_cable' : forms.CheckboxInput()
}
class CableForm(AssetForm): class CableForm(AssetForm):
class Meta: class Meta(AssetForm.Meta):
model = models.Cable model = models.Cable
fields = '__all__'
class SupplierForm(forms.ModelForm): class SupplierForm(forms.Form):
class Meta: class Meta:
model = models.Supplier model = models.Supplier
fields = '__all__' fields = '__all__'

View File

@@ -21,6 +21,7 @@ class Command(BaseCommand):
self.create_statuses() self.create_statuses()
self.create_suppliers() self.create_suppliers()
self.create_assets() self.create_assets()
self.create_connectors()
def create_categories(self): def create_categories(self):
categories = ['Case', 'Video', 'General', 'Sound', 'Lighting', 'Rigging'] categories = ['Case', 'Video', 'General', 'Sound', 'Lighting', 'Rigging']
@@ -60,3 +61,14 @@ class Command(BaseCommand):
asset.purchased_from = random.choice(suppliers) asset.purchased_from = random.choice(suppliers)
asset.save() asset.save()
def create_connectors(self):
connectors = [
{ "description":"13A UK", "current_rating":13, "voltage_rating":230, "num_pins":3 },
{ "description":"16A", "current_rating":16, "voltage_rating":230, "num_pins":3 },
{ "description":"32/3", "current_rating":32, "voltage_rating":400, "num_pins":5 },
{ "description":"Socapex", "current_rating":23, "voltage_rating":600, "num_pins":19 },
]
for connector in connectors:
conn = models.Connector.objects.create(**connector)
conn.save()

View File

@@ -21,7 +21,7 @@ class Command(BaseCommand):
self.delete_objects(models.AssetCategory) self.delete_objects(models.AssetCategory)
self.delete_objects(models.AssetStatus) self.delete_objects(models.AssetStatus)
self.delete_objects(models.Supplier) self.delete_objects(models.Supplier)
self.delete_objects(models.Collection) self.delete_objects(models.Connector)
self.delete_objects(models.Asset) self.delete_objects(models.Asset)
def delete_objects(self, model): def delete_objects(self, model):

View File

@@ -58,7 +58,7 @@
{% endfor %} {% endfor %}
</select> </select>
</div> </div>
{% render_field form.is_cable|attr:'onchange=checkIfCableHidden()' value=object.is_cable %} <label for="{{ form.is_cable.id_for_label }}">Cable?</label> {% render_field form.is_cable|attr:'onchange=checkIfCableHidden()' %} <label for="{{ form.is_cable.id_for_label }}">Cable?</label>
<div class="form-group"> <div class="form-group">
<label for="{{ form.status.id_for_label }}" >Status</label> <label for="{{ form.status.id_for_label }}" >Status</label>
<select class="form-control" name="{{ form.status.name }}" id="{{ form.status.id_for_label }}" required> <select class="form-control" name="{{ form.status.name }}" id="{{ form.status.id_for_label }}" required>
@@ -146,8 +146,8 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.plug.id_for_label }}">Plug</label> <label for="{{ form.plug.id_for_label }}">Plug</label>
<select name="{{ cable_form.plug.name }}" id="{{ cable_form.plug.id_for_label }}" class="form-control"> <select name="{{ form.plug.name }}" id="{{ form.plug.id_for_label }}" class="form-control">
<option value="None"> <option value="None">
{% for connector in connectors %} {% for connector in connectors %}
<option value="{{ connector.pk }}"> <option value="{{ connector.pk }}">
@@ -157,8 +157,8 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.socket.id_for_label }}">Socket</label> <label for="{{ form.socket.id_for_label }}">Socket</label>
<select name="{{ cable_form.socket.name }}" id="{{ cable_form.socket.id_for_label }}" class="form-control"> <select name="{{ form.socket.name }}" id="{{ form.socket.id_for_label }}" class="form-control">
<option value="None"> <option value="None">
{% for connector in connectors %} {% for connector in connectors %}
<option value="{{ connector.pk }}"> <option value="{{ connector.pk }}">
@@ -168,22 +168,22 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.length.id_for_label }}">Length</label> <label for="{{ form.length.id_for_label }}">Length</label>
{% render_field cable_form.length|add_class:'form-control' %} {% render_field form.length|add_class:'form-control' %}
<span class="input-group-addon">{{ cable_form.length.help_text }}</span> <span class="input-group-addon">{{ form.length.help_text }}</span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.csa.id_for_label }}">Cross Sectional Area</label> <label for="{{ form.csa.id_for_label }}">Cross Sectional Area</label>
{% render_field cable_form.csa|add_class:'form-control' value=object.csa %} {% render_field form.csa|add_class:'form-control' value=object.csa %}
<span class="input-group-addon">{{ cable_form.csa.help_text }}</span> <span class="input-group-addon">{{ form.csa.help_text }}</span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.circuits.id_for_label }}">Circuits</label> <label for="{{ form.circuits.id_for_label }}">Circuits</label>
{% render_field cable_form.circuits|add_class:'form-control' value=object.circuits %} {% render_field form.circuits|add_class:'form-control' value=object.circuits %}
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="{{ cable_form.cores.id_for_label }}">Cores</label> <label for="{{ form.cores.id_for_label }}">Cores</label>
{% render_field cable_form.cores|add_class:'form-control' value=object.cores %} {% render_field form.cores|add_class:'form-control' value=object.cores %}
</div> </div>
</div> </div>
</div> </div>
@@ -216,7 +216,7 @@
{% block js%} {% block js%}
<script> <script>
function checkIfCableHidden() { function checkIfCableHidden() {
if(document.getElementById("id_category").value == "3" && document.getElementById("id_is_cable").checked) { //TODO: CHANGE THIS IN PRODUCTION if(document.getElementById("id_category").value == "33" && document.getElementById("id_is_cable").checked) { //TODO: CHANGE THIS IN PRODUCTION
document.getElementById("cable-table").hidden = false; document.getElementById("cable-table").hidden = false;
} else { } else {
document.getElementById("cable-table").hidden = true; document.getElementById("cable-table").hidden = true;

View File

@@ -13,12 +13,6 @@ from dateutil import parser
import simplejson as json import simplejson as json
from assets import models, forms from assets import models, forms
class CableFormMixin:
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["cable_form"] = forms.CableForm()
return context
class AssetList(LoginRequiredMixin, generic.ListView): class AssetList(LoginRequiredMixin, generic.ListView):
model = models.Asset model = models.Asset
template_name = 'asset_list.html' template_name = 'asset_list.html'
@@ -64,7 +58,7 @@ class AssetSearch(AssetList):
return JsonResponse(result, safe=False) return JsonResponse(result, safe=False)
class AssetDetail(LoginRequiredMixin, CableFormMixin, generic.DetailView): class AssetDetail(LoginRequiredMixin, generic.DetailView):
model = models.Asset model = models.Asset
template_name = 'asset_update.html' template_name = 'asset_update.html'
@@ -74,27 +68,29 @@ class AssetDetail(LoginRequiredMixin, CableFormMixin, generic.DetailView):
# template_name = 'asset_update.html' # template_name = 'asset_update.html'
# # success_url = reverse_lazy('asset_list') # # success_url = reverse_lazy('asset_list')
class AssetEdit(LoginRequiredMixin, CableFormMixin, generic.UpdateView): class AssetEdit(LoginRequiredMixin, generic.UpdateView):
template_name = 'asset_update.html' template_name = 'asset_update.html'
model = models.Asset model = models.Asset
form_class = forms.AssetForm
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(AssetEdit, self).get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['form'] = forms.AssetForm context['form'] = forms.AssetForm
# context['asset_names'] = models.Asset.objects.values_list('asset_id', 'description').order_by('-date_acquired')[]
context['edit'] = True context['edit'] = True
return context return context
def get_form_class(self):
if self.object.is_cable:
return forms.CableForm
return forms.AssetForm
def form_invalid(self, form): def form_invalid(self, form):
return super().form_invalid(form) return super().form_invalid(form)
def get_success_url(self): def get_success_url(self):
return reverse("asset_detail", kwargs={"pk":self.object.id}) return reverse("asset_detail", kwargs={"pk":self.object.id})
class AssetCreate(LoginRequiredMixin, CableFormMixin, generic.CreateView): class AssetCreate(LoginRequiredMixin, generic.CreateView):
template_name = 'asset_create.html' template_name = 'asset_create.html'
model = models.Asset model = models.Asset
form_class = forms.AssetForm form_class = forms.AssetForm
@@ -106,6 +102,14 @@ class AssetCreate(LoginRequiredMixin, CableFormMixin, generic.CreateView):
context["connectors"] = models.Connector.objects.all() context["connectors"] = models.Connector.objects.all()
return context return context
def get_form_class(self):
if self.request.method == "POST":
if 'is_cable' in self.request.POST:
return forms.CableForm
return forms.AssetForm
else:
return forms.CableForm #For GET, so that all form fields can be placed
def get_success_url(self): def get_success_url(self):
return reverse("asset_detail", kwargs={"pk":self.object.id}) return reverse("asset_detail", kwargs={"pk":self.object.id})
@@ -116,16 +120,14 @@ class DuplicateMixin:
return self.render_to_response(self.get_context_data()) return self.render_to_response(self.get_context_data())
class AssetDuplicate(DuplicateMixin, AssetCreate): class AssetDuplicate(DuplicateMixin, AssetCreate):
template_name = 'asset_create.html'
model = models.Asset model = models.Asset
form_class = forms.AssetForm
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(AssetCreate, self).get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["create"] = None context["create"] = None
context["duplicate"] = True context["duplicate"] = True
context['previous_asset_id'] = self.get_object().asset_id context['previous_asset_id'] = self.get_object().asset_id
context["previous_asset_pk"] = pk = self.kwargs.get(self.pk_url_kwarg) context["previous_asset_pk"] = self.kwargs.get(self.pk_url_kwarg)
return context return context
@login_required() @login_required()