mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Launch a modal to select BOM download format
- This will have to change! A client-side hack for now.. - Work out a better way to do this!
This commit is contained in:
parent
be60fbcc25
commit
7eea9d1a20
@ -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',
|
||||
]
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 %}
|
||||
|
@ -1,7 +0,0 @@
|
||||
Export BOM (Bill of Materials) for {{ part.name }}
|
||||
|
||||
<form method="post" action='' class='js-modal-form' enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% crispy form %}
|
||||
</form>
|
@ -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'),
|
||||
|
@ -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)
|
||||
|
||||
|
@ -12,6 +12,46 @@ function reloadBomTable(table, options) {
|
||||
}
|
||||
|
||||
|
||||
function downloadBom(options = {}) {
|
||||
|
||||
var modal = options.modal || "#modal-form";
|
||||
|
||||
var content = `
|
||||
<b>Select file format</b><br>
|
||||
<div class='controls'>
|
||||
<select id='bom-format' class='select'>
|
||||
<option value='csv'>CSV</option>
|
||||
<option value='xls'>XLSX</option>
|
||||
<option value='pdf'>PDF</option>
|
||||
<option value='xml'>XML</option>
|
||||
<option value='htm'>HTML</option>
|
||||
</select>
|
||||
</div>
|
||||
`;
|
||||
|
||||
openModal({
|
||||
modal: modal,
|
||||
title: "Export Bill of Materials",
|
||||
submit_text: "Download",
|
||||
close_text: "Cancel",
|
||||
});
|
||||
|
||||
modalSetContent(modal, content);
|
||||
|
||||
$(modal).on('click', '#modal-form-submit', function() {
|
||||
$(modal).modal('hide');
|
||||
|
||||
var format = $(modal).find('#bom-format :selected').val();
|
||||
|
||||
if (options.url) {
|
||||
var url = options.url + "?format=" + format;
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function loadBomTable(table, options) {
|
||||
/* Load a BOM table with some configurable options.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user