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:
Oliver Walters 2019-04-16 21:46:12 +10:00
parent be60fbcc25
commit 7eea9d1a20
7 changed files with 68 additions and 30 deletions

View File

@ -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',
]

View File

@ -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

View File

@ -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 %}

View File

@ -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>

View File

@ -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'),

View File

@ -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)

View File

@ -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.
*