2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-17 04:25:42 +00:00

Added match parts step, need to process fields data

This commit is contained in:
eeintech
2021-05-04 14:45:52 -04:00
parent 7cdf0af04a
commit 64fb492b97
7 changed files with 326 additions and 36 deletions

View File

@ -18,25 +18,17 @@ class FileManager:
name = ''
# Fields which are absolutely necessary for valid upload
REQUIRED_HEADERS = [
'Quantity'
]
REQUIRED_HEADERS = []
# Fields which are used for part matching (only one of them is needed)
PART_MATCH_HEADERS = [
'Part_Name',
'Part_IPN',
'Part_ID',
]
PART_MATCH_HEADERS = []
# Fields which would be helpful but are not required
OPTIONAL_HEADERS = [
]
OPTIONAL_HEADERS = []
EDITABLE_HEADERS = [
]
EDITABLE_HEADERS = []
HEADERS = REQUIRED_HEADERS + PART_MATCH_HEADERS + OPTIONAL_HEADERS
HEADERS = []
def __init__(self, file, name=None):
""" Initialize the FileManager class with a user-uploaded file object """
@ -48,6 +40,9 @@ class FileManager:
# Process initial file
self.process(file)
# Update headers
self.update_headers()
def process(self, file):
""" Process file """
@ -69,6 +64,37 @@ class FileManager:
raise ValidationError(_(f'Error reading {self.name} file (invalid format)'))
except tablib.core.InvalidDimensions:
raise ValidationError(_(f'Error reading {self.name} file (incorrect dimension)'))
def update_headers(self):
""" Update headers """
self.HEADERS = self.REQUIRED_HEADERS + self.PART_MATCH_HEADERS + self.OPTIONAL_HEADERS
def setup(self):
""" Setup headers depending on the file name """
if not self.name:
return False
if self.name == 'order':
self.REQUIRED_HEADERS = [
'Quantity',
]
self.PART_MATCH_HEADERS = [
'Manufacturer_MPN',
'Supplier_SKU',
]
self.OPTIONAL_HEADERS = [
'Unit_Price',
'Extended_Price',
]
# Update headers
self.update_headers()
return True
def guess_header(self, header, threshold=80):
""" Try to match a header (from the file) to a list of known headers

View File

@ -117,22 +117,45 @@ class MultiStepFormView(SessionWizardView):
"""
form_list = []
form_steps_template = []
form_steps_description = []
file_manager = None
media_folder = ''
file_storage = FileSystemStorage(settings.MEDIA_ROOT)
def __init__(self, *args, **kwargs):
""" Override init method to set media folder """
super().__init__(*args, **kwargs)
self.process_media_folder()
def process_media_folder(self):
""" Process media folder """
if self.media_folder:
media_folder_abs = os.path.join(settings.MEDIA_ROOT, self.media_folder)
if not os.path.exists(media_folder_abs):
os.mkdir(media_folder_abs)
self.file_storage = FileSystemStorage(location=media_folder_abs)
def get_template_names(self):
""" Select template """
try:
# Get template
template = self.form_steps_template[int(self.steps.current)]
except IndexError:
return self.template_name
return template
def get_context_data(self, **kwargs):
""" Update context data """
# Retrieve current context
context = super().get_context_data(**kwargs)
# Get description
# Get form description
try:
description = self.form_steps_description[int(self.steps.current)]
except IndexError: