Add some more parts
- Fasteners - ICs
@ -4,7 +4,7 @@
|
|||||||
"pk": 1,
|
"pk": 1,
|
||||||
"fields": {
|
"fields": {
|
||||||
"password": "pbkdf2_sha256$260000$NNqALp0c36DPuISI5Q6iM3$+ILiuXGdDbEo4PXR5myUO/zHaNXhzHMPdtN2lZaKrg8=",
|
"password": "pbkdf2_sha256$260000$NNqALp0c36DPuISI5Q6iM3$+ILiuXGdDbEo4PXR5myUO/zHaNXhzHMPdtN2lZaKrg8=",
|
||||||
"last_login": "2021-07-28T12:51:26.950Z",
|
"last_login": "2021-08-02T13:14:16.179Z",
|
||||||
"is_superuser": true,
|
"is_superuser": true,
|
||||||
"username": "admin",
|
"username": "admin",
|
||||||
"first_name": "",
|
"first_name": "",
|
||||||
@ -21,7 +21,7 @@
|
|||||||
"model": "common.inventreesetting",
|
"model": "common.inventreesetting",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
"fields": {
|
"fields": {
|
||||||
"value": "0.4.0",
|
"value": "0.4.2",
|
||||||
"key": "INVENTREE_LATEST_VERSION"
|
"key": "INVENTREE_LATEST_VERSION"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -353,6 +353,22 @@
|
|||||||
"key": "PART_SHOW_IMPORT"
|
"key": "PART_SHOW_IMPORT"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "common.inventreesetting",
|
||||||
|
"pk": 43,
|
||||||
|
"fields": {
|
||||||
|
"value": "False",
|
||||||
|
"key": "PART_CREATE_INITIAL"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "common.inventreesetting",
|
||||||
|
"pk": 44,
|
||||||
|
"fields": {
|
||||||
|
"value": "True",
|
||||||
|
"key": "PART_SHOW_PRICE_IN_FORMS"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "common.inventreeusersetting",
|
"model": "common.inventreeusersetting",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -915,6 +931,26 @@
|
|||||||
"currency": "USD"
|
"currency": "USD"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "company.company",
|
||||||
|
"pk": 29,
|
||||||
|
"fields": {
|
||||||
|
"name": "Texas Instruments",
|
||||||
|
"description": "",
|
||||||
|
"website": "https://www.ti.com/",
|
||||||
|
"address": "",
|
||||||
|
"phone": "",
|
||||||
|
"email": "",
|
||||||
|
"contact": "",
|
||||||
|
"link": "",
|
||||||
|
"image": "company_images/company_29_img.jpg",
|
||||||
|
"notes": "",
|
||||||
|
"is_customer": false,
|
||||||
|
"is_supplier": true,
|
||||||
|
"is_manufacturer": true,
|
||||||
|
"currency": "USD"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "company.manufacturerpart",
|
"model": "company.manufacturerpart",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -2895,6 +2931,17 @@
|
|||||||
"description": null
|
"description": null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "company.manufacturerpart",
|
||||||
|
"pk": 191,
|
||||||
|
"fields": {
|
||||||
|
"part": 61,
|
||||||
|
"manufacturer": 29,
|
||||||
|
"MPN": "MAX232IDR",
|
||||||
|
"link": "",
|
||||||
|
"description": "MAX232IDR"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "company.supplierpart",
|
"model": "company.supplierpart",
|
||||||
"pk": 11,
|
"pk": 11,
|
||||||
@ -5775,6 +5822,22 @@
|
|||||||
"multiple": 1
|
"multiple": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "company.supplierpart",
|
||||||
|
"pk": 196,
|
||||||
|
"fields": {
|
||||||
|
"part": 61,
|
||||||
|
"supplier": 1,
|
||||||
|
"SKU": "2156-MAX232IDR-ND",
|
||||||
|
"manufacturer_part": 191,
|
||||||
|
"link": "https://www.digikey.com/en/products/detail/texas-instruments/MAX232IDR/13523247",
|
||||||
|
"description": "",
|
||||||
|
"note": "",
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"packaging": "",
|
||||||
|
"multiple": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "label.stockitemlabel",
|
"model": "label.stockitemlabel",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -5841,7 +5904,7 @@
|
|||||||
"default_location": null,
|
"default_location": null,
|
||||||
"default_keywords": null,
|
"default_keywords": null,
|
||||||
"lft": 1,
|
"lft": 1,
|
||||||
"rght": 10,
|
"rght": 16,
|
||||||
"tree_id": 1,
|
"tree_id": 1,
|
||||||
"level": 0
|
"level": 0
|
||||||
}
|
}
|
||||||
@ -5885,8 +5948,8 @@
|
|||||||
"parent": 1,
|
"parent": 1,
|
||||||
"default_location": null,
|
"default_location": null,
|
||||||
"default_keywords": null,
|
"default_keywords": null,
|
||||||
"lft": 2,
|
"lft": 8,
|
||||||
"rght": 9,
|
"rght": 15,
|
||||||
"tree_id": 1,
|
"tree_id": 1,
|
||||||
"level": 1
|
"level": 1
|
||||||
}
|
}
|
||||||
@ -5900,8 +5963,8 @@
|
|||||||
"parent": 4,
|
"parent": 4,
|
||||||
"default_location": null,
|
"default_location": null,
|
||||||
"default_keywords": "passive resistor",
|
"default_keywords": "passive resistor",
|
||||||
"lft": 7,
|
"lft": 13,
|
||||||
"rght": 8,
|
"rght": 14,
|
||||||
"tree_id": 1,
|
"tree_id": 1,
|
||||||
"level": 2
|
"level": 2
|
||||||
}
|
}
|
||||||
@ -5915,8 +5978,8 @@
|
|||||||
"parent": 4,
|
"parent": 4,
|
||||||
"default_location": null,
|
"default_location": null,
|
||||||
"default_keywords": "passive capacitor",
|
"default_keywords": "passive capacitor",
|
||||||
"lft": 3,
|
"lft": 9,
|
||||||
"rght": 4,
|
"rght": 10,
|
||||||
"tree_id": 1,
|
"tree_id": 1,
|
||||||
"level": 2
|
"level": 2
|
||||||
}
|
}
|
||||||
@ -5930,6 +5993,51 @@
|
|||||||
"parent": 4,
|
"parent": 4,
|
||||||
"default_location": null,
|
"default_location": null,
|
||||||
"default_keywords": null,
|
"default_keywords": null,
|
||||||
|
"lft": 11,
|
||||||
|
"rght": 12,
|
||||||
|
"tree_id": 1,
|
||||||
|
"level": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partcategory",
|
||||||
|
"pk": 8,
|
||||||
|
"fields": {
|
||||||
|
"name": "IC",
|
||||||
|
"description": "Integrated Circuits",
|
||||||
|
"parent": 1,
|
||||||
|
"default_location": null,
|
||||||
|
"default_keywords": null,
|
||||||
|
"lft": 2,
|
||||||
|
"rght": 7,
|
||||||
|
"tree_id": 1,
|
||||||
|
"level": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partcategory",
|
||||||
|
"pk": 9,
|
||||||
|
"fields": {
|
||||||
|
"name": "Interface",
|
||||||
|
"description": "Drivers, receivers, transceivers",
|
||||||
|
"parent": 8,
|
||||||
|
"default_location": null,
|
||||||
|
"default_keywords": null,
|
||||||
|
"lft": 3,
|
||||||
|
"rght": 4,
|
||||||
|
"tree_id": 1,
|
||||||
|
"level": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partcategory",
|
||||||
|
"pk": 11,
|
||||||
|
"fields": {
|
||||||
|
"name": "MCU",
|
||||||
|
"description": "Microcontrollers and processors",
|
||||||
|
"parent": 8,
|
||||||
|
"default_location": null,
|
||||||
|
"default_keywords": null,
|
||||||
"lft": 5,
|
"lft": 5,
|
||||||
"rght": 6,
|
"rght": 6,
|
||||||
"tree_id": 1,
|
"tree_id": 1,
|
||||||
@ -8396,6 +8504,293 @@
|
|||||||
"level": 0
|
"level": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 61,
|
||||||
|
"fields": {
|
||||||
|
"name": "MAX232IDR",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Dual RS232 transceiver in SOIC-16 package",
|
||||||
|
"keywords": null,
|
||||||
|
"category": 9,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/soic-16.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 61,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 62,
|
||||||
|
"fields": {
|
||||||
|
"name": "MCP2561SN",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "High speed CAN transceiver in SOIC-8 package",
|
||||||
|
"keywords": null,
|
||||||
|
"category": 9,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/soic-8.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 62,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 63,
|
||||||
|
"fields": {
|
||||||
|
"name": "M3x8 SHCS",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Socket head cap screw, M3 thread, 8.0mm",
|
||||||
|
"keywords": "screw",
|
||||||
|
"category": 3,
|
||||||
|
"IPN": "",
|
||||||
|
"revision": "",
|
||||||
|
"link": "",
|
||||||
|
"image": "part_images/SHCS.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": "",
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 63,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 64,
|
||||||
|
"fields": {
|
||||||
|
"name": "M2x6 SHCS",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Socket head cap screw, M2 thread, 6.0mm",
|
||||||
|
"keywords": "screw",
|
||||||
|
"category": 3,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/SHCS.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 64,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 65,
|
||||||
|
"fields": {
|
||||||
|
"name": "M2x4 SHCS",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Socket head cap screw, M2 thread, 4.0mm",
|
||||||
|
"keywords": "screw",
|
||||||
|
"category": 3,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/SHCS.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 65,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 66,
|
||||||
|
"fields": {
|
||||||
|
"name": "M3x8 Torx",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Torx head screw, M3 thread, 8.0mm",
|
||||||
|
"keywords": "screw",
|
||||||
|
"category": 3,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/torx.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 66,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.part",
|
||||||
|
"pk": 67,
|
||||||
|
"fields": {
|
||||||
|
"name": "M3x10 Torx",
|
||||||
|
"is_template": false,
|
||||||
|
"variant_of": null,
|
||||||
|
"description": "Torx head screw, M3 thread, 10.0mm",
|
||||||
|
"keywords": "screw",
|
||||||
|
"category": 3,
|
||||||
|
"IPN": null,
|
||||||
|
"revision": null,
|
||||||
|
"link": null,
|
||||||
|
"image": "part_images/torx.jpg",
|
||||||
|
"default_location": null,
|
||||||
|
"default_supplier": null,
|
||||||
|
"default_expiry": 0,
|
||||||
|
"minimum_stock": 0,
|
||||||
|
"units": null,
|
||||||
|
"assembly": false,
|
||||||
|
"component": true,
|
||||||
|
"trackable": false,
|
||||||
|
"purchaseable": true,
|
||||||
|
"salable": false,
|
||||||
|
"active": true,
|
||||||
|
"virtual": false,
|
||||||
|
"notes": null,
|
||||||
|
"bom_checksum": "",
|
||||||
|
"bom_checked_by": null,
|
||||||
|
"bom_checked_date": null,
|
||||||
|
"creation_date": "2021-08-02",
|
||||||
|
"creation_user": 1,
|
||||||
|
"responsible": null,
|
||||||
|
"base_cost": "0.000",
|
||||||
|
"multiple": 1,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 67,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "part.partparametertemplate",
|
"model": "part.partparametertemplate",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -8420,6 +8815,22 @@
|
|||||||
"units": "%"
|
"units": "%"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparametertemplate",
|
||||||
|
"pk": 4,
|
||||||
|
"fields": {
|
||||||
|
"name": "Length",
|
||||||
|
"units": "mm"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparametertemplate",
|
||||||
|
"pk": 5,
|
||||||
|
"fields": {
|
||||||
|
"name": "Thread",
|
||||||
|
"units": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "part.partparameter",
|
"model": "part.partparameter",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -9716,6 +10127,96 @@
|
|||||||
"data": "1%"
|
"data": "1%"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 145,
|
||||||
|
"fields": {
|
||||||
|
"part": 63,
|
||||||
|
"template": 4,
|
||||||
|
"data": "8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 146,
|
||||||
|
"fields": {
|
||||||
|
"part": 63,
|
||||||
|
"template": 5,
|
||||||
|
"data": "M3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 147,
|
||||||
|
"fields": {
|
||||||
|
"part": 64,
|
||||||
|
"template": 4,
|
||||||
|
"data": "6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 148,
|
||||||
|
"fields": {
|
||||||
|
"part": 64,
|
||||||
|
"template": 5,
|
||||||
|
"data": "M2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 149,
|
||||||
|
"fields": {
|
||||||
|
"part": 65,
|
||||||
|
"template": 4,
|
||||||
|
"data": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 150,
|
||||||
|
"fields": {
|
||||||
|
"part": 65,
|
||||||
|
"template": 5,
|
||||||
|
"data": "M2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 151,
|
||||||
|
"fields": {
|
||||||
|
"part": 66,
|
||||||
|
"template": 4,
|
||||||
|
"data": "8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 152,
|
||||||
|
"fields": {
|
||||||
|
"part": 66,
|
||||||
|
"template": 5,
|
||||||
|
"data": "M3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 153,
|
||||||
|
"fields": {
|
||||||
|
"part": 67,
|
||||||
|
"template": 4,
|
||||||
|
"data": "10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "part.partparameter",
|
||||||
|
"pk": 154,
|
||||||
|
"fields": {
|
||||||
|
"part": 67,
|
||||||
|
"template": 5,
|
||||||
|
"data": "M3"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "report.testreport",
|
"model": "report.testreport",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
@ -15365,6 +15866,82 @@
|
|||||||
"level": 0
|
"level": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"model": "stock.stockitem",
|
||||||
|
"pk": 172,
|
||||||
|
"fields": {
|
||||||
|
"uid": "",
|
||||||
|
"parent": null,
|
||||||
|
"part": 66,
|
||||||
|
"supplier_part": null,
|
||||||
|
"location": 3,
|
||||||
|
"packaging": "bag",
|
||||||
|
"belongs_to": null,
|
||||||
|
"customer": null,
|
||||||
|
"serial": null,
|
||||||
|
"link": "",
|
||||||
|
"batch": null,
|
||||||
|
"quantity": "580.00000",
|
||||||
|
"updated": "2021-08-02",
|
||||||
|
"build": null,
|
||||||
|
"is_building": false,
|
||||||
|
"purchase_order": null,
|
||||||
|
"sales_order": null,
|
||||||
|
"expiry_date": null,
|
||||||
|
"stocktake_date": null,
|
||||||
|
"stocktake_user": null,
|
||||||
|
"review_needed": false,
|
||||||
|
"delete_on_deplete": true,
|
||||||
|
"status": 10,
|
||||||
|
"notes": null,
|
||||||
|
"purchase_price_currency": "USD",
|
||||||
|
"purchase_price": "0.2800",
|
||||||
|
"owner": null,
|
||||||
|
"infinite": false,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 146,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "stock.stockitem",
|
||||||
|
"pk": 173,
|
||||||
|
"fields": {
|
||||||
|
"uid": "",
|
||||||
|
"parent": null,
|
||||||
|
"part": 65,
|
||||||
|
"supplier_part": null,
|
||||||
|
"location": 3,
|
||||||
|
"packaging": "box",
|
||||||
|
"belongs_to": null,
|
||||||
|
"customer": null,
|
||||||
|
"serial": null,
|
||||||
|
"link": "",
|
||||||
|
"batch": null,
|
||||||
|
"quantity": "5000.00000",
|
||||||
|
"updated": "2021-08-02",
|
||||||
|
"build": null,
|
||||||
|
"is_building": false,
|
||||||
|
"purchase_order": null,
|
||||||
|
"sales_order": null,
|
||||||
|
"expiry_date": null,
|
||||||
|
"stocktake_date": null,
|
||||||
|
"stocktake_user": null,
|
||||||
|
"review_needed": false,
|
||||||
|
"delete_on_deplete": true,
|
||||||
|
"status": 10,
|
||||||
|
"notes": null,
|
||||||
|
"purchase_price_currency": "USD",
|
||||||
|
"purchase_price": null,
|
||||||
|
"owner": null,
|
||||||
|
"infinite": false,
|
||||||
|
"lft": 1,
|
||||||
|
"rght": 2,
|
||||||
|
"tree_id": 147,
|
||||||
|
"level": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"model": "stock.stockitemtracking",
|
"model": "stock.stockitemtracking",
|
||||||
"pk": 2,
|
"pk": 2,
|
||||||
@ -15883,7 +16460,7 @@
|
|||||||
"fields": {
|
"fields": {
|
||||||
"tracking_type": 1,
|
"tracking_type": 1,
|
||||||
"item": 34,
|
"item": 34,
|
||||||
"date": "2021-07-28T14:37:56.000Z",
|
"date": "2021-07-28T14:37:56Z",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
"user": null,
|
"user": null,
|
||||||
"deltas": {
|
"deltas": {
|
||||||
@ -17684,5 +18261,37 @@
|
|||||||
"quantity": 500.0
|
"quantity": 500.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "stock.stockitemtracking",
|
||||||
|
"pk": 172,
|
||||||
|
"fields": {
|
||||||
|
"tracking_type": 1,
|
||||||
|
"item": 172,
|
||||||
|
"date": "2021-08-02T13:35:56.313Z",
|
||||||
|
"notes": "",
|
||||||
|
"user": 1,
|
||||||
|
"deltas": {
|
||||||
|
"status": 10,
|
||||||
|
"location": 3,
|
||||||
|
"quantity": 580.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"model": "stock.stockitemtracking",
|
||||||
|
"pk": 173,
|
||||||
|
"fields": {
|
||||||
|
"tracking_type": 1,
|
||||||
|
"item": 173,
|
||||||
|
"date": "2021-08-02T13:36:47.681Z",
|
||||||
|
"notes": "",
|
||||||
|
"user": 1,
|
||||||
|
"deltas": {
|
||||||
|
"status": 10,
|
||||||
|
"location": 3,
|
||||||
|
"quantity": 5000.0
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
BIN
media/company_images/company_29_img.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
media/company_images/company_29_img.thumbnail.jpg
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
media/part_images/SHCS.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
media/part_images/SHCS.thumbnail.jpg
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
media/part_images/soic-16.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
media/part_images/soic-16.thumbnail.jpg
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
media/part_images/soic-8.jpg
Normal file
After Width: | Height: | Size: 9.2 KiB |
BIN
media/part_images/soic-8.thumbnail.jpg
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
media/part_images/torx.jpg
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
media/part_images/torx.thumbnail.jpg
Normal file
After Width: | Height: | Size: 3.5 KiB |
134
scripts/capacitor_digikey.py
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
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=6)
|
||||||
|
|
||||||
|
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('C ' , 'Capacitor ceramic X7R ')
|
||||||
|
|
||||||
|
print(f"Capacitor: {res.name} -> {search_term}")
|
||||||
|
|
||||||
|
request = KeywordSearchRequest(search_term, record_count=25)
|
||||||
|
|
||||||
|
result = digikey.keyword_search(body=request)
|
||||||
|
|
||||||
|
# Set of manufacturer part numbers
|
||||||
|
MPN = set()
|
||||||
|
|
||||||
|
if len(result.products) == 0:
|
||||||
|
print("--- NO RESULTS FOUND ---")
|
||||||
|
|
||||||
|
for product in result.products:
|
||||||
|
|
||||||
|
mpn = product.manufacturer_part_number
|
||||||
|
|
||||||
|
if mpn in MPN or len(MPN) >= 2:
|
||||||
|
continue
|
||||||
|
|
||||||
|
print(f"MPN > {mpn}")
|
||||||
|
|
||||||
|
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]
|
||||||
|
|
||||||
|
if manufacturer == None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
manufacturers[man_name] = manufacturer
|
||||||
|
|
||||||
|
m_parts = ManufacturerPart.list(inventree, MPN=mpn)
|
||||||
|
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
|
||||||
|
print(manufacturer_part)
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
|
67
scripts/create_capacitor_stock.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
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")
|
||||||
|
|
||||||
|
|
43
scripts/create_capacitors.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
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,
|
||||||
|
})
|
64
scripts/create_resistor_stock.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
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")
|
||||||
|
|
||||||
|
|
131
scripts/resistors_digikey.py
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
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,
|
||||||
|
})
|
||||||
|
|