mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Link to download a BOM template file
This commit is contained in:
parent
3085db44af
commit
2831ac55c4
@ -6,6 +6,7 @@ import io
|
|||||||
import json
|
import json
|
||||||
import os.path
|
import os.path
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
import tablib
|
||||||
|
|
||||||
from wsgiref.util import FileWrapper
|
from wsgiref.util import FileWrapper
|
||||||
from django.http import StreamingHttpResponse
|
from django.http import StreamingHttpResponse
|
||||||
@ -91,6 +92,33 @@ def MakeBarcode(object_type, object_id, object_url, data={}):
|
|||||||
return json.dumps(data, sort_keys=True)
|
return json.dumps(data, sort_keys=True)
|
||||||
|
|
||||||
|
|
||||||
|
def IsValidSpreadsheetFormat(fmt):
|
||||||
|
""" Test if a file format specifier is in the valid list of spreadsheet file formats """
|
||||||
|
|
||||||
|
return fmt.lower() in ['csv', 'xls', 'xlsx', 'tsv']
|
||||||
|
|
||||||
|
|
||||||
|
def MakeBomTemplate(fmt):
|
||||||
|
""" Generate a Bill of Materials upload template file (for user download) """
|
||||||
|
|
||||||
|
if not IsValidSpreadsheetFormat(fmt):
|
||||||
|
fmt = 'csv'
|
||||||
|
|
||||||
|
fields = [
|
||||||
|
'Part',
|
||||||
|
'Quantity',
|
||||||
|
'Overage',
|
||||||
|
'Reference',
|
||||||
|
'Notes'
|
||||||
|
]
|
||||||
|
|
||||||
|
data = tablib.Dataset(headers=fields).export(fmt)
|
||||||
|
|
||||||
|
filename = 'InvenTree_BOM_Template.' + fmt
|
||||||
|
|
||||||
|
return DownloadFile(data, filename)
|
||||||
|
|
||||||
|
|
||||||
def DownloadFile(data, filename, content_type='application/text'):
|
def DownloadFile(data, filename, content_type='application/text'):
|
||||||
""" Create a dynamic file for the user to download.
|
""" Create a dynamic file for the user to download.
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ from __future__ import unicode_literals
|
|||||||
from InvenTree.forms import HelperForm
|
from InvenTree.forms import HelperForm
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.core.validators import MinValueValidator
|
||||||
|
|
||||||
from .models import Part, PartCategory, PartAttachment
|
from .models import Part, PartCategory, PartAttachment
|
||||||
from .models import BomItem
|
from .models import BomItem
|
||||||
|
13
InvenTree/part/templates/part/bom_upload.html
Normal file
13
InvenTree/part/templates/part/bom_upload.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{% extends "modal_form.html" %}
|
||||||
|
|
||||||
|
{% block pre_form_content %}
|
||||||
|
|
||||||
|
{{ block.super }}
|
||||||
|
|
||||||
|
<p>Select a BOM file to upload for <b>{{ part.name }} - <i>{{ part.description }}</i></b>.</p>
|
||||||
|
|
||||||
|
<p>The BOM file must contain the required named columns as provided in the <a href="/part/bom_template/">BOM Upload Template</a></a></p>
|
||||||
|
|
||||||
|
<p>Supported file formats: <i>.csv, .tsv, .xls, .xlsx</i></p>
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -74,6 +74,9 @@ part_urls = [
|
|||||||
# Create a new BOM item
|
# Create a new BOM item
|
||||||
url(r'^bom/new/?', views.BomItemCreate.as_view(), name='bom-item-create'),
|
url(r'^bom/new/?', views.BomItemCreate.as_view(), name='bom-item-create'),
|
||||||
|
|
||||||
|
# Download a BOM upload template
|
||||||
|
url(r'^bom_template/?', views.BomUploadTemplate.as_view(), name='bom-upload-template'),
|
||||||
|
|
||||||
# Individual part
|
# Individual part
|
||||||
url(r'^(?P<pk>\d+)/', include(part_detail_urls)),
|
url(r'^(?P<pk>\d+)/', include(part_detail_urls)),
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
|
from django.views.generic.edit import FormMixin
|
||||||
from django.forms.models import model_to_dict
|
from django.forms.models import model_to_dict
|
||||||
from django.forms import HiddenInput, CheckboxInput
|
from django.forms import HiddenInput, CheckboxInput
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ from . import forms as part_forms
|
|||||||
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView
|
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView
|
||||||
from InvenTree.views import QRCodeView
|
from InvenTree.views import QRCodeView
|
||||||
|
|
||||||
from InvenTree.helpers import DownloadFile, str2bool
|
from InvenTree.helpers import DownloadFile, str2bool, MakeBomTemplate
|
||||||
from InvenTree.status_codes import OrderStatus
|
from InvenTree.status_codes import OrderStatus
|
||||||
|
|
||||||
|
|
||||||
@ -722,6 +723,17 @@ class BomUpload(AjaxView):
|
|||||||
}
|
}
|
||||||
|
|
||||||
return self.renderJsonResponse(request, form, data=data)
|
return self.renderJsonResponse(request, form, data=data)
|
||||||
|
class BomUploadTemplate(AjaxView):
|
||||||
|
"""
|
||||||
|
Provide a BOM upload template file for download.
|
||||||
|
- Generates a template file in the provided format e.g. ?format=csv
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
|
||||||
|
export_format = request.GET.get('format', 'csv')
|
||||||
|
|
||||||
|
return MakeBomTemplate(export_format)
|
||||||
|
|
||||||
|
|
||||||
class BomDownload(AjaxView):
|
class BomDownload(AjaxView):
|
||||||
|
Loading…
Reference in New Issue
Block a user