mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-17 21:42:14 +00:00
Split out create and duplicate templates, got both working
This commit is contained in:
187
assets/templates/asset_create.html
Normal file
187
assets/templates/asset_create.html
Normal file
@@ -0,0 +1,187 @@
|
||||
{% extends 'base_assets.html' %}
|
||||
{% load widget_tweaks %}
|
||||
{% load asset_templatetags %}
|
||||
{% block title %}Asset {{ object.asset_id }}{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% if duplicate %}
|
||||
Duplication of Asset: {{ previous_asset_id }}
|
||||
{% else %}
|
||||
Create Asset
|
||||
{% endif %}
|
||||
</h1>
|
||||
</div>
|
||||
{% if duplicate %}
|
||||
<form method="post" id="asset_update_form" action="{% url 'asset_duplicate' pk=previous_asset_pk%}">
|
||||
{% else %}
|
||||
<form method="post" id="asset_update_form" action="{% url 'asset_create'%}">
|
||||
{% endif %}
|
||||
<div class="row" style="padding-bottom: 1em">
|
||||
<div class="col-sm-12">
|
||||
<div class="pull-right">
|
||||
{% include 'partials/asset_buttons.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="id" value="{{ object.id|default:0 }}" hidden=true>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Asset Details
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="form-group"
|
||||
<label for="{{ form.asset_id.id_for_label }}">Asset ID</label>
|
||||
{% render_field form.asset_id|add_class:'form-control' value=object.asset_id %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="{{ form.description.id_for_label }}">Description</label>
|
||||
{% render_field form.description|add_class:'form-control' value=object.description %}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="{{ form.category.id_for_label }}" >Category</label>
|
||||
<select name="{{ form.category.name }}" id="{{ form.category.id_for_label }}" required class="form-control">
|
||||
{% for id, choice in form.category.field.choices %}
|
||||
<option value="{{ id }}"
|
||||
{% if object.category.id == id %}
|
||||
selected
|
||||
{% endif %}>
|
||||
{{ choice }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="{{ form.status.id_for_label }}" >Status</label>
|
||||
<select class="form-control" name="{{ form.status.name }}" id="{{ form.status.id_for_label }}" required>
|
||||
{% for id, choice in form.status.field.choices %}
|
||||
<option value="{{ id }}"
|
||||
{% if not object.status.id and choice == "Active" or object.status.id == id %}selected{% endif %}>{{ choice }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="{{ form.serial_number.id_for_label }}">Serial Number</label>
|
||||
{% render_field form.serial_number|add_class:'form-control' value=object.serial_number %}
|
||||
</div>
|
||||
<!---TODO: Lower default number of lines in comments box-->
|
||||
<div class="form-group">
|
||||
<label for="{{ form.comments.id_for_label }}">Comments</label>
|
||||
{% render_field form.comments|add_class:'form-control' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Purchase Details
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label for="{{ form.purchased_from.id_for_label }}">Purchased From</label>
|
||||
<select class="form-control" name="{{ form.purchased_from.name }}" id="{{ form.purchased_from.id_for_label }}">
|
||||
{% for id, choice in form.purchased_from.field.choices %}
|
||||
<option value="{{ id }}"
|
||||
{% if object.purchased_from.id == id %}
|
||||
selected
|
||||
{% endif %}>
|
||||
{{ choice }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="{{ form.purchase_price.id_for_label }}">Purchase Price</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">£</span>
|
||||
{% render_field form.purchase_price|add_class:'form-control' value=object.purchase_price %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="{{ form.salvage_value.id_for_label }}">Salvage Value</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">£</span>
|
||||
{% render_field form.salvage_value|add_class:'form-control' value=object.salvage_value %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="{{ form.date_acquired.id_for_label }}" >Date Acquired</label>
|
||||
{% if object.date_acquired%}
|
||||
{% with date_acq=object.date_acquired|date:"Y-m-d" %}
|
||||
{% render_field form.date_acquired|add_class:'form-control'|attr:'type="date"' value=date_acq %}
|
||||
{% endwith %}
|
||||
{% else %}
|
||||
<input type="date" name="date_acquired" value="{% now "Y-m-d" %}"
|
||||
class="form-control" id="id_date_acquired">
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="{{ form.date_sold.id_for_label }}">Date Sold</label>
|
||||
{% with date_sol=object.form.date_sold|date:"Y-m-d" %}
|
||||
{% render_field form.date_sold|add_class:'form-control'|attr:'type="date"' value=date_sol %}
|
||||
{% endwith %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
Collection Details
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="form-group">
|
||||
<label for="parent_id">Parent</label>
|
||||
<input type="hidden" name="{{ form.parent.html_name }}" id="hidden_parent_id" value="{{ object.parent.id }}">
|
||||
<div class="input-group">
|
||||
<input type="text" id="parent_id" value="{{ object.parent|default:'' }}" disabled="" class="form-control">
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-default" onclick="clearParent()">Clear</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="parent_search">Search for asset</label>
|
||||
<div class="input-group">
|
||||
<input type="text" id="parent_search" class="form-control">
|
||||
<span class="input-group-btn">
|
||||
<button type="button" class="btn btn-default" onclick="formAssetSearch()">
|
||||
<i class="glyphicon glyphicon-search"></i> Search
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col s2">
|
||||
<br>
|
||||
</div>
|
||||
<div class="col s12" id="formAssetSearchResult">
|
||||
<!--Placeholder for search results-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{% include 'partials/asset_buttons.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% include 'partials/confirm_delete.html' with object=object %}
|
||||
|
||||
{% endblock %}
|
||||
@@ -14,7 +14,7 @@
|
||||
{% else %}
|
||||
<!--detail view-->
|
||||
<a href="{% url 'asset_update' object.pk %}" class="btn btn-default"><i class="glyphicon glyphicon-edit"></i> Edit</a>
|
||||
<a class="btn btn-default" href="{% url 'asset_update' object.pk %}?duplicate=true"><i class="glyphicon glyphicon-duplicate"></i> Duplicate</a>
|
||||
<a class="btn btn-default" href="{% url 'asset_duplicate' object.pk %}"><i class="glyphicon glyphicon-duplicate"></i> Duplicate</a>
|
||||
<a class="btn btn-danger" data-toggle="modal" data-target="#confirm_delete_modal"><i class="glyphicon glyphicon-trash"></i> Delete</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -12,8 +12,8 @@ urlpatterns = [
|
||||
path('asset/<int:pk>/', views.AssetDetail.as_view(), name='asset_detail'),
|
||||
path('asset/create/', views.AssetCreate.as_view(), name='asset_create'),
|
||||
path('asset/<int:pk>/edit/', views.AssetEdit.as_view(), name='asset_update'),
|
||||
path('asset/<int:pk>/duplicate/', views.AssetDuplicate.as_view(), name='asset_duplicate'),
|
||||
path('asset/delete/', views.asset_delete, name='ajax_asset_delete'),
|
||||
path('asset/update/', views.asset_update, name='ajax_asset_update'),
|
||||
|
||||
path('supplier/list', views.SupplierList.as_view(), name='supplier_list'),
|
||||
path('supplier/<int:pk>', views.SupplierDetail.as_view(), name='supplier_detail'),
|
||||
|
||||
@@ -65,67 +65,49 @@ class AssetEdit(LoginRequiredMixin, generic.UpdateView):
|
||||
context['form'] = forms.AssetForm
|
||||
# context['asset_names'] = models.Asset.objects.values_list('asset_id', 'description').order_by('-date_acquired')[]
|
||||
|
||||
if self.request.GET.get('duplicate'):
|
||||
context['duplicate'] = True
|
||||
context['previous_asset_id'] = context['object'].asset_id
|
||||
context['previous_asset_pk'] = context['object'].pk
|
||||
context['object'].pk = 0
|
||||
context['object'].asset_id = ''
|
||||
context['object'].serial_number = ''
|
||||
else:
|
||||
context['edit'] = True
|
||||
context['edit'] = True
|
||||
|
||||
return context
|
||||
|
||||
def form_invalid(self, form):
|
||||
print(form.errors)
|
||||
return super().form_invalid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("asset_detail", kwargs={"pk":self.object.id})
|
||||
|
||||
class AssetCreate(LoginRequiredMixin, generic.CreateView):
|
||||
template_name = 'asset_update.html'
|
||||
template_name = 'asset_create.html'
|
||||
model = models.Asset
|
||||
form_class = forms.AssetForm
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(AssetCreate, self).get_context_data(**kwargs)
|
||||
|
||||
context["create"] = True
|
||||
return context
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("asset_detail", kwargs={"pk":self.object.id})
|
||||
|
||||
@login_required()
|
||||
def asset_update(request):
|
||||
context = dict()
|
||||
class DuplicateMixin:
|
||||
def get(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
self.object.pk = None
|
||||
return self.render_to_response(self.get_context_data())
|
||||
|
||||
if request.method == 'POST' and request.is_ajax():
|
||||
defaults = QueryDict(request.POST['form'].encode('ASCII')).dict()
|
||||
defaults.pop('csrfmiddlewaretoken')
|
||||
|
||||
asset_pk = int(defaults.pop('id'))
|
||||
|
||||
if defaults['date_acquired']:
|
||||
defaults['date_acquired'] = parser.parse(defaults.pop('date_acquired'))
|
||||
else:
|
||||
defaults['date_acquired'] = None
|
||||
|
||||
if defaults['date_sold']:
|
||||
defaults['date_sold'] = parser.parse(defaults.pop('date_sold'))
|
||||
else:
|
||||
defaults['date_sold'] = None
|
||||
|
||||
# if defaults['parent']:
|
||||
# defaults['parent'] = models.Asset.objects.get(asset_id=defaults.pop('parent'))
|
||||
|
||||
form = forms.AssetForm(defaults)
|
||||
context['valid'] = form.is_valid()
|
||||
context['errors'] = form.errors.as_json()
|
||||
|
||||
if asset_pk == 0:
|
||||
asset = models.Asset.objects.create(**form.cleaned_data)
|
||||
else:
|
||||
asset, created = models.Asset.objects.update_or_create(pk=asset_pk, defaults=form.cleaned_data)
|
||||
|
||||
context['url'] = reverse('asset_detail', args=[asset.pk])
|
||||
|
||||
return HttpResponse(json.dumps(context), content_type='application/json')
|
||||
class AssetDuplicate(DuplicateMixin, AssetCreate):
|
||||
template_name = 'asset_create.html'
|
||||
model = models.Asset
|
||||
form_class = forms.AssetForm
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(AssetCreate, self).get_context_data(**kwargs)
|
||||
context["create"] = None
|
||||
context["duplicate"] = True
|
||||
context['previous_asset_id'] = self.get_object().asset_id
|
||||
context["previous_asset_pk"] = pk = self.kwargs.get(self.pk_url_kwarg)
|
||||
return context
|
||||
|
||||
@login_required()
|
||||
def asset_delete(request):
|
||||
|
||||
Reference in New Issue
Block a user