# system.kanoa.inventory.addInventoryTransaction(inventoryTransactionInfo, userId)

Adds a new inventory transaction record, adjusting the on-hand inventory balance for the affected part and inventory asset (bin/location) by the given quantity. 
Passing an `inventoryTransactionId` inside `inventoryTransactionInfo` updates the existing record instead of inserting a new one; omit it (or pass `None`) to insert. 
Typical uses include recording receipts, issues, transfers, and adjustments against a part's stock.

---
### Parameters
**inventoryTransactionInfo** `Dictionary`<br />
<table class='dictionaryKeyTable'>
	<tbody>
 	<tr><td> - assetId</td><td>Integer</td><td>Not required. Physical asset the part was used on.</td></tr>	
 	<tr><td> - costCenterId</td><td>Integer</td><td>Not required.</td></tr>	
 	<tr><td> - inventoryAssetId</td><td>Integer</td><td>Required for insert.</td></tr>	
 	<tr><td> - inventoryTransactionId</td><td>Integer</td><td>Not required. Pass to update existing record.</td></tr>	
 	<tr><td> - inventoryTransactionTypeId</td><td>Integer</td><td>Required for insert.</td></tr>	
 	<tr><td> - notes</td><td>String</td><td>Not required.</td></tr>	
 	<tr><td> - partId</td><td>Integer</td><td>Required for insert.</td></tr>	
 	<tr><td> - quantity</td><td>Float</td><td>Required for insert. Must be > 0.</td></tr>	
 	<tr><td> - referenceNumber</td><td>String</td><td>Not required. e.g. 'PO 1234'</td></tr>	
 	<tr><td> - referenceType</td><td>String</td><td>Not required. e.g. 'PO', 'WO'</td></tr>	
 	<tr><td> - sourceRecordId</td><td>Integer</td><td>Not required. For automated processes only.</td></tr>	
 	<tr><td> - sourceSchemaName</td><td>String</td><td>Not required. For automated processes only.</td></tr>	
 	<tr><td> - sourceTableName</td><td>String</td><td>Not required. For automated processes only.</td></tr>	
 	<tr><td> - supplierId</td><td>Integer</td><td>Not required.</td></tr>	
 	<tr><td> - unitCost</td><td>Float</td><td>Not required.</td></tr>	
	</tbody>
</table>

**userId** `Integer`:Id of the user executing the function<br />

---
### Returns
**inventoryTransactionId** `Integer`<br />
**message** `String` None if success<br />

---
### Example
```python
inventoryTransactionInfo = {
	                            'inventoryAssetId': 42,
	                            'inventoryTransactionTypeId': 1,
	                            'partId': 1057,
	                            'quantity': 25.0,
	                            'unitCost': 4.35,
	                            'referenceType': 'PO',
	                            'referenceNumber': 'PO 1234',
	                            'supplierId': 8,
	                            'notes': 'Receipt against purchase order for stockroom replenishment'
                            }
userId = system.kanoa.security.getIDPUserId({'userName': 'SYSTEM'})
inventoryTransactionId, message = system.kanoa.inventory.addInventoryTransaction(inventoryTransactionInfo, userId)
print inventoryTransactionId, message
```
