def create_parameter_template(name: str, units: str) -> int: ''' Create InvenTree parameter template ''' global inventree_api parameter_templates = ParameterTemplate.list(inventree_api) for item in parameter_templates: if name == item.name: return 0 parameter_template = ParameterTemplate.create(inventree_api, { 'name': name, 'units': units, }) if parameter_template: return parameter_template.pk else: return 0
def create_parameter(part_id: int, template_name: int, value: str): ''' Create InvenTree part parameter based on template ''' global inventree_api parameter_template_list = ParameterTemplate.list(inventree_api) template_id = 0 for item in parameter_template_list: if template_name == item.name: template_id = item.pk break # Check if template_id already exists for this part part = Part(inventree_api, part_id) part_parameters = part.getParameters() is_new_part_parameters_template_id = True for item in part_parameters: # cprint(f'[TREE]\t{parameter.template} ?= {template_id}', silent=SILENT) if item.template == template_id: is_new_part_parameters_template_id = False break # cprint(part_parameters, silent=SILENT) ''' Create parameter only if: - template exists - parameter does not exist for this part ''' parameter = None if template_id > 0 and is_new_part_parameters_template_id: parameter = Parameter.create(inventree_api, { 'part': part_id, 'template': template_id, 'data': value, }) if parameter: return parameter.pk, is_new_part_parameters_template_id else: if template_id == 0: cprint( f'[TREE]\tError: Parameter template "{template_name}" does not exist', silent=settings.SILENT) return 0, False
def is_new_part(category_id: int, part_info: dict) -> int: ''' Check if part exists based on parameters (or description) ''' global inventree_api # Get category object part_category = PartCategory(inventree_api, category_id) # Fetch all parts from category and subcategories part_list = [] part_list.extend(part_category.getParts()) for subcategory in part_category.getChildCategories(): part_list.extend(subcategory.getParts()) # Extract parameter from part info new_part_parameters = part_info['parameters'] template_list = ParameterTemplate.list(inventree_api) def fetch_template_name(template_id): for item in template_list: if item.pk == template_id: return item.name # Retrieve parent category name for parameters compare try: category_name = part_category.getParentCategory().name except AttributeError: category_name = part_category.name filters = config_interface.load_category_parameters_filters( category=category_name, supplier_config_path=settings.CONFIG_PARAMETERS_FILTERS) # cprint(filters) for part in part_list: # Get part parameters db_part_parameters = part.getParameters() part_parameters = {} for parameter in db_part_parameters: parameter_name = fetch_template_name(parameter.template) parameter_value = parameter.data part_parameters[parameter_name] = parameter_value if new_part_parameters: # Compare database part with new part compare = part_tools.compare( new_part_parameters=new_part_parameters, db_part_parameters=part_parameters, include_filters=filters) else: # Compare with name and description compare = part_info['name'] == part.name and \ part_info['description'] == part.description and \ part_info['revision'] == part.revision if compare: cprint(f'\n[TREE]\tFound part match in database (pk = {part.pk})', silent=settings.HIDE_DEBUG) return part.pk cprint(f'\n[TREE]\tNo match found in database', silent=settings.HIDE_DEBUG) return 0