diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 171da76539..977d6e5ef3 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -23,8 +23,10 @@ class BomExportForm(HelperForm): # TODO - Define these choices somewhere else, and import them here format_choices = ( ('csv', 'CSV'), - ('xlsx', 'XLSX'), ('pdf', 'PDF'), + ('xml', 'XML'), + ('xlsx', 'XLSX'), + ('html', 'HTML') ) # Select export type @@ -33,6 +35,7 @@ class BomExportForm(HelperForm): class Meta: model = Part fields = [ + 'format', ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 2e7dd7b7c5..46c7c1b010 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -302,7 +302,7 @@ class Part(models.Model): rows.append([str(x) for x in line]) - file_format = kwargs.get('file_format', 'csv').lower() + file_format = kwargs.get('format', 'csv').lower() kwargs['header'] = header kwargs['rows'] = rows diff --git a/InvenTree/part/templates/part/bom.html b/InvenTree/part/templates/part/bom.html index 7ec298df76..805f501dcd 100644 --- a/InvenTree/part/templates/part/bom.html +++ b/InvenTree/part/templates/part/bom.html @@ -70,8 +70,11 @@ }); $("#export-bom").click(function () { - //TODO - Select format of the data - location.href = "{% url 'bom-export' part.id %}"; + downloadBom({ + modal: '#modal-form', + url: "{% url 'bom-export' part.id %}" + }); + }); {% endif %} diff --git a/InvenTree/part/templates/part/bom_export.html b/InvenTree/part/templates/part/bom_export.html deleted file mode 100644 index 5482284cd7..0000000000 --- a/InvenTree/part/templates/part/bom_export.html +++ /dev/null @@ -1,7 +0,0 @@ -Export BOM (Bill of Materials) for {{ part.name }} - -
\ No newline at end of file diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index 5ebff2dc83..75d5041b9c 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -19,8 +19,7 @@ part_detail_urls = [ url(r'^edit/?', views.PartEdit.as_view(), name='part-edit'), url(r'^delete/?', views.PartDelete.as_view(), name='part-delete'), url(r'^track/?', views.PartDetail.as_view(template_name='part/track.html'), name='part-track'), - url(r'^bom-export/?', views.BomExport.as_view(), name='bom-export'), - url(r'^bom-download/?', views.BomDownload.as_view(), name='bom-download'), + url(r'^bom-export/?', views.BomDownload.as_view(), name='bom-export'), url(r'^bom/?', views.PartDetail.as_view(template_name='part/bom.html'), name='part-bom'), url(r'^build/?', views.PartDetail.as_view(template_name='part/build.html'), name='part-build'), url(r'^stock/?', views.PartDetail.as_view(template_name='part/stock.html'), name='part-stock'), diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index f611b908bb..e66f65861e 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -128,39 +128,39 @@ class BomExport(AjaxView): model = Part ajax_form_title = 'Export BOM' - template_name = 'part/bom_export.html' + ajax_template_name = 'part/bom_export.html' #template_name = 'modal_form.html' context_object_name = 'part' form_class = BomExportForm + def get_object(self): + return get_object_or_404(Part, pk=self.kwargs['pk']) + def get(self, request, *args, **kwargs): form = self.form_class() - part = get_object_or_404(Part, pk=self.kwargs['pk']) + part = self.get_object() context = { 'part': part } + if request.is_ajax(): + pass + return self.renderJsonResponse(request, form, context=context) def post(self, request, *args, **kwargs): + """ + User has now submitted the BOM export data + """ + + part = self.get_object() + + print("POSTED") return super(AjaxView, self).post(request, *args, **kwargs) - """ - def get(self, request, *args, **kwargs): - - data = { - 'title': 'Export BOM', - 'html_data': render_to_string(self.getAjaxTemplate(), - self.get_context_data(), - request=request) - } - - return JsonResponse(data) - """ - def get_data(self): return { #'form_valid': True, @@ -188,11 +188,11 @@ class BomDownload(AjaxView): part = get_object_or_404(Part, pk=self.kwargs['pk']) export_format = request.GET.get('format', 'csv') - + # Placeholder to test file export filename = '"' + part.name + '_BOM.' + export_format + '"' - filedata = part.export_bom() + filedata = part.export_bom(format=export_format) return DownloadFile(filedata, filename) diff --git a/InvenTree/static/script/inventree/bom.js b/InvenTree/static/script/inventree/bom.js index 8428bd3291..c3e7de0351 100644 --- a/InvenTree/static/script/inventree/bom.js +++ b/InvenTree/static/script/inventree/bom.js @@ -12,6 +12,46 @@ function reloadBomTable(table, options) { } +function downloadBom(options = {}) { + + var modal = options.modal || "#modal-form"; + + var content = ` + Select file format