diff --git a/assets/templates/asset_create.html b/assets/templates/asset_create.html new file mode 100644 index 00000000..640008e3 --- /dev/null +++ b/assets/templates/asset_create.html @@ -0,0 +1,187 @@ +{% extends 'base_assets.html' %} +{% load widget_tweaks %} +{% load asset_templatetags %} +{% block title %}Asset {{ object.asset_id }}{% endblock %} + + +{% block content %} + + +{% if duplicate %} +
+{% else %} + +{% endif %} +
+
+
+ {% include 'partials/asset_buttons.html' %} +
+
+
+ {% csrf_token %} + +
+
+
+
+ Asset Details +
+
+
Asset ID + {% render_field form.asset_id|add_class:'form-control' value=object.asset_id %} +
+
+ + {% render_field form.description|add_class:'form-control' value=object.description %} +
+
+ + +
+
+ + +
+
+ + {% render_field form.serial_number|add_class:'form-control' value=object.serial_number %} +
+ +
+ + {% render_field form.comments|add_class:'form-control' %} +
+
+
+
+
+
+
+
+
+ Purchase Details +
+
+
+ + +
+ +
+ +
+ £ + {% render_field form.purchase_price|add_class:'form-control' value=object.purchase_price %} +
+
+ +
+ +
+ £ + {% render_field form.salvage_value|add_class:'form-control' value=object.salvage_value %} +
+
+ +
+ + {% 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 %} + + {% endif %} +
+ +
+ + {% 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 %} +
+
+
+
+
+
+
+ Collection Details +
+
+
+ + +
+ + + + +
+
+ +
+ +
+ + + + +
+
+
+
+
+
+ +
+
+
+
+
+
+ {% include 'partials/asset_buttons.html' %} +
+
+
+ +
+ +{% include 'partials/confirm_delete.html' with object=object %} + +{% endblock %} \ No newline at end of file diff --git a/assets/templates/partials/asset_buttons.html b/assets/templates/partials/asset_buttons.html index 25eeac9c..606a9bd7 100644 --- a/assets/templates/partials/asset_buttons.html +++ b/assets/templates/partials/asset_buttons.html @@ -14,7 +14,7 @@ {% else %} Edit - Duplicate + Duplicate Delete {% endif %} diff --git a/assets/urls.py b/assets/urls.py index 900f4c33..5970d64b 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -12,8 +12,8 @@ urlpatterns = [ path('asset//', views.AssetDetail.as_view(), name='asset_detail'), path('asset/create/', views.AssetCreate.as_view(), name='asset_create'), path('asset//edit/', views.AssetEdit.as_view(), name='asset_update'), + path('asset//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/', views.SupplierDetail.as_view(), name='supplier_detail'), diff --git a/assets/views.py b/assets/views.py index 037937f4..ff2d0a22 100644 --- a/assets/views.py +++ b/assets/views.py @@ -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):