mirror of
				https://github.com/inventree/demo-dataset.git
				synced 2025-11-04 07:15:40 +00:00 
			
		
		
		
	Remove old scripts (#85)
This commit is contained in:
		@@ -1,67 +0,0 @@
 | 
				
			|||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.part import Part, PartCategory
 | 
					 | 
				
			||||||
from inventree.stock import StockItem, StockLocation
 | 
					 | 
				
			||||||
from inventree.company import SupplierPart
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import random
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
INVENTREE_URL = "http://localhost:8000"
 | 
					 | 
				
			||||||
INVENTREE_USERNAME = "admin"
 | 
					 | 
				
			||||||
INVENTREE_PASSWORD = "inventree"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
capacitors = Part.list(api, category=6)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
storage = StockLocation(api, pk=8)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
count = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for cap in capacitors:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if random.random() > 0.65:
 | 
					 | 
				
			||||||
        continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Get the first matching supplierpart
 | 
					 | 
				
			||||||
    sp_list = SupplierPart.list(api, part=cap.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for sp in sp_list:
 | 
					 | 
				
			||||||
        if random.random() > 0.6:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        status = 10
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        q = random.random()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        quantity = 1000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if q < 0.1:
 | 
					 | 
				
			||||||
            quantity = 500
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        elif q > 0.85:
 | 
					 | 
				
			||||||
            quantity = 4000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if random.random() < 0.2:
 | 
					 | 
				
			||||||
            quantity += int(random.random() * 2000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if random.random() > 0.95:
 | 
					 | 
				
			||||||
            status = 55  # Damaged
 | 
					 | 
				
			||||||
        elif random.random() > 0.95:
 | 
					 | 
				
			||||||
            status = 50  # Attention
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        StockItem.create(api, data={
 | 
					 | 
				
			||||||
            'location': storage.pk,
 | 
					 | 
				
			||||||
            'part': cap.pk,
 | 
					 | 
				
			||||||
            'quantity': quantity,
 | 
					 | 
				
			||||||
            'supplier_part': sp.pk,
 | 
					 | 
				
			||||||
            'packaging': 'reel',
 | 
					 | 
				
			||||||
            'status': status,
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        count += 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print(f"Created {count} new stock items")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.part import Part, PartCategory
 | 
					 | 
				
			||||||
from inventree.stock import StockItem, StockLocation
 | 
					 | 
				
			||||||
from inventree.company import SupplierPart
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import random
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
INVENTREE_URL = "http://localhost:8000"
 | 
					 | 
				
			||||||
INVENTREE_USERNAME = "admin"
 | 
					 | 
				
			||||||
INVENTREE_PASSWORD = "inventree"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
category = 6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
packages = [
 | 
					 | 
				
			||||||
    '0402',
 | 
					 | 
				
			||||||
    '0603',
 | 
					 | 
				
			||||||
    '0805',
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
values = [
 | 
					 | 
				
			||||||
    # '100pF',
 | 
					 | 
				
			||||||
    '100nF',
 | 
					 | 
				
			||||||
    '1uF',
 | 
					 | 
				
			||||||
    '10uF',
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for package in packages:
 | 
					 | 
				
			||||||
    for value in values:
 | 
					 | 
				
			||||||
        name = f"C_{value}_{package}"
 | 
					 | 
				
			||||||
        description = f"{value} in {package} SMD package"
 | 
					 | 
				
			||||||
        keywords = "cap smd ceramic"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Part.create(api, data={
 | 
					 | 
				
			||||||
            'name': name,
 | 
					 | 
				
			||||||
            'category': category,
 | 
					 | 
				
			||||||
            'description': description,
 | 
					 | 
				
			||||||
            'keywords': keywords,
 | 
					 | 
				
			||||||
            'purchaseable': True,
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
@@ -1,64 +0,0 @@
 | 
				
			|||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.part import Part, PartCategory
 | 
					 | 
				
			||||||
from inventree.stock import StockItem, StockLocation
 | 
					 | 
				
			||||||
from inventree.company import SupplierPart
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import random
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
INVENTREE_URL = "http://localhost:8000"
 | 
					 | 
				
			||||||
INVENTREE_USERNAME = "admin"
 | 
					 | 
				
			||||||
INVENTREE_PASSWORD = "inventree"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
resistors = Part.list(api, category=5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
storage = StockLocation(api, pk=8)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
count = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for resistor in resistors:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if random.random() > 0.65:
 | 
					 | 
				
			||||||
        continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    q = random.random()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    quantity = 1000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if q < 0.1:
 | 
					 | 
				
			||||||
        quantity = 2000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    elif q > 0.85:
 | 
					 | 
				
			||||||
        quantity = 4000
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Get the first matching supplierpart
 | 
					 | 
				
			||||||
    sp_list = SupplierPart.list(api, part=resistor.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for sp in sp_list:
 | 
					 | 
				
			||||||
        if random.random() > 0.6:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        status = 10
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if random.random() > 0.95:
 | 
					 | 
				
			||||||
            status = 55  # Damaged
 | 
					 | 
				
			||||||
        elif random.random() > 0.95:
 | 
					 | 
				
			||||||
            status = 50  # Attention
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        StockItem.create(api, data={
 | 
					 | 
				
			||||||
            'location': storage.pk,
 | 
					 | 
				
			||||||
            'part': resistor.pk,
 | 
					 | 
				
			||||||
            'quantity': quantity,
 | 
					 | 
				
			||||||
            'supplier_part': sp.pk,
 | 
					 | 
				
			||||||
            'packaging': 'reel',
 | 
					 | 
				
			||||||
            'status': status,
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        count += 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print(f"Created {count} new stock items")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
@@ -1,97 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
from random import randint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.part import Part, Parameter, ParameterTemplate
 | 
					 | 
				
			||||||
from inventree.stock import StockItem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Pin headers category
 | 
					 | 
				
			||||||
cat_id = 21
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Storage location
 | 
					 | 
				
			||||||
loc_id = 10
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rows = [1, 2]
 | 
					 | 
				
			||||||
pitch = [1.27, 2.0, 2.54]
 | 
					 | 
				
			||||||
ways = range(2, 11)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Parameter templates
 | 
					 | 
				
			||||||
templates = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for tmp in ParameterTemplate.list(api):
 | 
					 | 
				
			||||||
    templates[tmp.name] = tmp.pk
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for r in rows:
 | 
					 | 
				
			||||||
    for p in pitch:
 | 
					 | 
				
			||||||
        for w in ways:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            n = r * w
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            name = f"PinHeader_{r}x{w:02d}x{p}mm"
 | 
					 | 
				
			||||||
            description = f"Male pin header connector, {r} rows, {n} positions, {p}mm pitch, vertical"
 | 
					 | 
				
			||||||
            keywords = "pin header connector"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Check if this part already exists
 | 
					 | 
				
			||||||
            results = Part.list(api, search=name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if len(results) > 0:
 | 
					 | 
				
			||||||
                part = results[0]
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                part = Part.create(
 | 
					 | 
				
			||||||
                    api,
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        'name': name,
 | 
					 | 
				
			||||||
                        'description': description,
 | 
					 | 
				
			||||||
                        'keywords': keywords,
 | 
					 | 
				
			||||||
                        'category': cat_id,
 | 
					 | 
				
			||||||
                        'purchaseable': True,
 | 
					 | 
				
			||||||
                        'component': True,
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Create stock item for this item
 | 
					 | 
				
			||||||
            items = StockItem.list(api, part=part.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if len(items) == 0:
 | 
					 | 
				
			||||||
                q = randint(0, 25)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if q > 0:
 | 
					 | 
				
			||||||
                    StockItem.create(
 | 
					 | 
				
			||||||
                        api,
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            'part': part.pk,
 | 
					 | 
				
			||||||
                            'quantity': q,
 | 
					 | 
				
			||||||
                            'location': loc_id,
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Generate parameters for each item
 | 
					 | 
				
			||||||
            Parameter.create(
 | 
					 | 
				
			||||||
                api,
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    'part': part.pk,
 | 
					 | 
				
			||||||
                    'template': templates['Pitch'],
 | 
					 | 
				
			||||||
                    'data': p
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Parameter.create(
 | 
					 | 
				
			||||||
                api,
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    'part': part.pk,
 | 
					 | 
				
			||||||
                    'template': templates['Positions'],
 | 
					 | 
				
			||||||
                    'data': n
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Parameter.create(
 | 
					 | 
				
			||||||
                api,
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    'part': part.pk,
 | 
					 | 
				
			||||||
                    'template': templates['Rows'],
 | 
					 | 
				
			||||||
                    'data': r
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
@@ -1,131 +0,0 @@
 | 
				
			|||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
from inventree.part import Part, PartCategory
 | 
					 | 
				
			||||||
from inventree.base import Parameter
 | 
					 | 
				
			||||||
from inventree.company import Company, ManufacturerPart, SupplierPart, ManufacturerPartParameter
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import digikey
 | 
					 | 
				
			||||||
from digikey.v3.productinformation import KeywordSearchRequest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
os.environ['DIGIKEY_CLIENT_ID'] = 'DjV4w1v0ebNTiL7Nqvslw0GkNYuYdrLG'
 | 
					 | 
				
			||||||
os.environ['DIGIKEY_CLIENT_SECRET'] = 'dK0dTRimeq3aiPH1'
 | 
					 | 
				
			||||||
os.environ['DIGIKEY_CLIENT_SANDBOX'] = 'False'
 | 
					 | 
				
			||||||
os.environ['DIGIKEY_STORAGE_PATH'] = 'C:\\Users\\Oliver\\Desktop\\digikey\\'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
INVENTREE_URL = "http://localhost:8000"
 | 
					 | 
				
			||||||
INVENTREE_USERNAME = "admin"
 | 
					 | 
				
			||||||
INVENTREE_PASSWORD = "inventree"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inventree = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
resistors = Part.list(inventree, category=5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getParameter(result, name):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for param in result.parameters:
 | 
					 | 
				
			||||||
        if param.parameter.lower() == name.lower():
 | 
					 | 
				
			||||||
            return param
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getValue(result, name):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    param = getParameter(result, name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if param:
 | 
					 | 
				
			||||||
        return param.value
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        return None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
manufacturers = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DIGIKEY_PK = 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for res in resistors:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    search_term = res.name.replace('_', ' ').replace('R ' , 'Resistor ')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    print(res.name, res.description)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    request = KeywordSearchRequest(search_term, record_count=25)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    result = digikey.keyword_search(body=request)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Set of manufacturer part numbers
 | 
					 | 
				
			||||||
    MPN = set()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for product in result.products:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        mpn = product.manufacturer_part_number
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        print(f"> {mpn}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if mpn in MPN or len(MPN) >= 5:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        MPN.add(mpn)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sku = product.digi_key_part_number
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        man_name = product.manufacturer.value
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if man_name in manufacturers.keys():
 | 
					 | 
				
			||||||
            manufacturer = manufacturers[man_name]
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # Search InvenTree for manufacturer name
 | 
					 | 
				
			||||||
            query = Company.list(inventree, search=man_name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if len(query) == 0:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                print(f"Creating new manufacturer: '{man_name}'")
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                manufacturer = Company.create(inventree, data={
 | 
					 | 
				
			||||||
                    'is_supplier': False,
 | 
					 | 
				
			||||||
                    'is_manufacturer': True,
 | 
					 | 
				
			||||||
                    'name': man_name,
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                manufacturer = query[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            manufacturers[man_name] = manufacturer
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        m_parts = ManufacturerPart.list(inventree, MPN=mpn)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        print("Existing Manufacturer Parts:")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for mp in m_parts:
 | 
					 | 
				
			||||||
            print(f" - {mp.MPN}, {mp.manufacturer}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if len(m_parts) == 0:
 | 
					 | 
				
			||||||
            print(f"Creating new part: {man_name} -> {mpn}")
 | 
					 | 
				
			||||||
            manufacturer_part = ManufacturerPart.create(inventree, data={
 | 
					 | 
				
			||||||
                'part': res.pk,
 | 
					 | 
				
			||||||
                'manufacturer': manufacturer.pk,
 | 
					 | 
				
			||||||
                'MPN': mpn,
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            manufacturer_part = m_parts[0]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Check if a "supplier part" exists
 | 
					 | 
				
			||||||
        s_parts = SupplierPart.list(
 | 
					 | 
				
			||||||
            inventree,
 | 
					 | 
				
			||||||
            manufacturer_part=manufacturer_part.pk,
 | 
					 | 
				
			||||||
            supplier=DIGIKEY_PK
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if s_parts is None or len(s_parts) == 0:
 | 
					 | 
				
			||||||
            print(f"Creating new supplier part")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            SupplierPart.create(inventree, data={
 | 
					 | 
				
			||||||
                'part': res.pk,
 | 
					 | 
				
			||||||
                'supplier': DIGIKEY_PK,
 | 
					 | 
				
			||||||
                'manufacturer_part': manufacturer_part.pk,
 | 
					 | 
				
			||||||
                'SKU': sku,
 | 
					 | 
				
			||||||
                'link': product.product_url,
 | 
					 | 
				
			||||||
                'description': product.product_description,
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
This script adds supplier availability data to some SupplierPart objects
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from random import randint
 | 
					 | 
				
			||||||
from matplotlib.style import available
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from progress.bar import Bar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.company import SupplierPart
 | 
					 | 
				
			||||||
from inventree.part import Part
 | 
					 | 
				
			||||||
from inventree.stock import StockItem
 | 
					 | 
				
			||||||
from scipy import rand
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ID for the "passives" category
 | 
					 | 
				
			||||||
passives_category_id = 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parts = Part.list(api, category=passives_category_id, cascade=True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar = Bar('Updating Supplier Availability', max=len(parts))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for part in parts:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    supplier_parts = SupplierPart.list(api, part=part.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for sp in supplier_parts:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Do not update every SupplierPart instance
 | 
					 | 
				
			||||||
        if randint(0, 10) > 3:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        available = randint(500, 50000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sp.save(
 | 
					 | 
				
			||||||
            data={
 | 
					 | 
				
			||||||
                'available': available
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bar.next()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar.finish()
 | 
					 | 
				
			||||||
@@ -1,127 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
This script adds new supplier data and supplier pricing for the demo dataset.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The supplier part numbers here are not real, neither is the pricing.
 | 
					 | 
				
			||||||
None of this data should be used for anything in the realm of sensible decision making.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import random
 | 
					 | 
				
			||||||
import string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from progress.bar import Bar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.company import Company, SupplierPart, SupplierPriceBreak
 | 
					 | 
				
			||||||
from inventree.part import Part
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ID for the "passives" category
 | 
					 | 
				
			||||||
passives_category_id = 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# List of electronics suppliers we wish to create supplier parts for
 | 
					 | 
				
			||||||
supplier_ids = [
 | 
					 | 
				
			||||||
    1,   # DigiKey
 | 
					 | 
				
			||||||
    2,   # Mouser
 | 
					 | 
				
			||||||
    3,   # Arrow
 | 
					 | 
				
			||||||
    39,  # LCSC
 | 
					 | 
				
			||||||
    40,  # Newark
 | 
					 | 
				
			||||||
    41,  # Future Electronics
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Special currency (default = USD)
 | 
					 | 
				
			||||||
currencies = {
 | 
					 | 
				
			||||||
    2: 'AUD',  # Mouser
 | 
					 | 
				
			||||||
    39: 'CNY',  # LCSC
 | 
					 | 
				
			||||||
    41: 'CAD', # Future
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parts = Part.list(api, category=passives_category_id, cascade=True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar = Bar('Creating Supplier Part Data', max=len(parts))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for part in parts:
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    bar.next()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Create at least one supplier part for each supplier
 | 
					 | 
				
			||||||
    for supplier_id in supplier_ids:
 | 
					 | 
				
			||||||
        supplier_parts = SupplierPart.list(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            part=part.pk,
 | 
					 | 
				
			||||||
            supplier=supplier_id,
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Supplier part already exists for this supplier
 | 
					 | 
				
			||||||
        if len(supplier_parts) > 0:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        supplier = Company(api, pk=supplier_id)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Create a new supplier part for this supplier
 | 
					 | 
				
			||||||
        SKU = supplier.name.upper()[0:3]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SKU += "-" + "".join(random.choice(string.digits) for _ in range(5))
 | 
					 | 
				
			||||||
        SKU += "-"
 | 
					 | 
				
			||||||
        SKU += "".join(random.choice(string.ascii_uppercase) for _ in range(3))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Create a new supplier part based on randomly generated SKU
 | 
					 | 
				
			||||||
        SupplierPart.create(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "part": part.pk,
 | 
					 | 
				
			||||||
                "supplier": supplier.pk,
 | 
					 | 
				
			||||||
                "SKU": SKU,
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Now, ensure that each SupplierPart has some associated price break information
 | 
					 | 
				
			||||||
    supplier_parts = SupplierPart.list(api, part=part.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for sp in supplier_parts:
 | 
					 | 
				
			||||||
        price_breaks = SupplierPriceBreak.list(api, part=sp.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Skip for any supplier pars which already have price-break information
 | 
					 | 
				
			||||||
        if len(price_breaks) > 0:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        currency = currencies.get(sp.supplier, 'USD')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Start with the highest price break for 1000x
 | 
					 | 
				
			||||||
        pb_1000 = 0.0025 + random.random() * 0.025
 | 
					 | 
				
			||||||
        pb_100 = pb_1000 * (10 + random.random() * 1.25)
 | 
					 | 
				
			||||||
        pb_1 = pb_100 * (10 + random.random() * 2.5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SupplierPriceBreak.create(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "part": sp.pk,
 | 
					 | 
				
			||||||
                "quantity": 1,
 | 
					 | 
				
			||||||
                "price": round(pb_1, 4),
 | 
					 | 
				
			||||||
                "price_currency": currency
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SupplierPriceBreak.create(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "part": sp.pk,
 | 
					 | 
				
			||||||
                "quantity": 100,
 | 
					 | 
				
			||||||
                "price": round(pb_100, 4),
 | 
					 | 
				
			||||||
                "price_currency": currency
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SupplierPriceBreak.create(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                "part": sp.pk,
 | 
					 | 
				
			||||||
                "quantity": 1000,
 | 
					 | 
				
			||||||
                "price": round(pb_1000, 4),
 | 
					 | 
				
			||||||
                "price_currency": currency
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar.finish()
 | 
					 | 
				
			||||||
@@ -1,74 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
This script finds stock items which are not associated with a SupplierPart, and:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Adds a SupplierPart Reference
 | 
					 | 
				
			||||||
- Adds a PurchasePrice reference
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from random import randint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from progress.bar import Bar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.api import InvenTreeAPI
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from inventree.company import SupplierPart, SupplierPriceBreak
 | 
					 | 
				
			||||||
from inventree.part import Part
 | 
					 | 
				
			||||||
from inventree.stock import StockItem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ID for the "passives" category
 | 
					 | 
				
			||||||
passives_category_id = 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
location = 11
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parts = Part.list(api, category=passives_category_id, cascade=True)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar = Bar('Updating Stock Records', max=len(parts))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for part in parts:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    supplier_parts = SupplierPart.list(api, part=part.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for sp in supplier_parts:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Find any supplier parts without stock
 | 
					 | 
				
			||||||
        stock_items = StockItem.list(api, part=part.pk, supplier_part=sp.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Ignore if there are existing stock items
 | 
					 | 
				
			||||||
        if len(stock_items) > 0:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        quantity = randint(0, 100)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if quantity <= 25:
 | 
					 | 
				
			||||||
            continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        price_breaks = SupplierPriceBreak.list(api, part=sp.pk)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        pp = None
 | 
					 | 
				
			||||||
        ppc = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for pb in price_breaks:
 | 
					 | 
				
			||||||
            if pb.quantity == 1:
 | 
					 | 
				
			||||||
                pp = pb.price
 | 
					 | 
				
			||||||
                ppc = pb.price_currency
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Create a new StockItem
 | 
					 | 
				
			||||||
        StockItem.create(
 | 
					 | 
				
			||||||
            api,
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                'part': part.pk,
 | 
					 | 
				
			||||||
                'supplier_part': sp.pk,
 | 
					 | 
				
			||||||
                'quantity': quantity,
 | 
					 | 
				
			||||||
                'location': location,
 | 
					 | 
				
			||||||
                'packaging': 'cut tape',
 | 
					 | 
				
			||||||
                'purchase_price': pp,
 | 
					 | 
				
			||||||
                'purchase_price_currency': ppc,
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bar.next()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bar.finish()
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user