Stock Movement Items¶
Create¶
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @addStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (addStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [{
"product.id": "ff8081816407132d0164071eec250001",
"quantityRequested": "100",
"sortOrder": 0,
"recipient.id": "1"
}]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "BK71",
"product": {
"id": "ff8081816407132d0164071eec250001",
"productCode": "BK71",
"name": "product 1+",
"description": "This is the penultimate product",
"category": {
"id": "ROOT",
"name": "ROOT"
}
},
"palletName": null,
"boxName": null,
"statusCode": "PENDING",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": null,
"quantityRevised": null,
"reasonCode": null,
"comments": null,
"recipient": null,
"sortOrder": null
}
]
}
}
Update¶
This is used to change the quantity or product associated with an item, as well as other changes like sort order. This is a direct change to the requisition item.
If you're looking to record a new quantity and want to keep the originally requested information, then you'll likely want to use the Revise Stock Movement Item example below This will allow you to keep the originally requested quantity and product information, record the new quantity, as well as a reason for the revision (see next section for more information)
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @updateStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Request Body (updateStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [{
"id": "ff808181644e51a401644e85891b0006",
"product.id": "ff80818155df9de40155df9e31000001",
"quantityRequested": "500",
"sortOrder": 0
}]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "00001",
"product": {
"id": "ff80818155df9de40155df9e31000001",
"productCode": "00001",
"name": "Ibuprofen 200mg",
"description": null,
"category": {
"id": "1",
"name": "Medicines"
}
},
"palletName": null,
"boxName": null,
"statusCode": "PENDING",
"quantityRequested": 500,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": 0,
"quantityRevised": null,
"reasonCode": null,
"comments": null,
"recipient": null,
"sortOrder": null
}
]
}
}
Revise¶
This is used to record a revision to the quantity requested. This requires the user to choose a reason code (i.e. STOCKOUT) and optionally add comments that may help provide more context for the revision.
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @reviseStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (reviseStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [
{
"id":"ff808181644e51a401644e85891b0006",
"quantityRevised":200,
"reasonCode":"BECAUSE",
"comments":"because i said so",
}
]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "BK71",
"product": {
"id": "ff8081816407132d0164071eec250001",
"productCode": "BK71",
"name": "product 1+",
"description": "This is the penultimate product",
"category": {
"id": "ROOT",
"name": "ROOT"
}
},
"palletName": null,
"boxName": null,
"statusCode": "CHANGED",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": 100,
"quantityRevised": 200,
"reasonCode": "BECAUSE",
"comments": "because i said so",
"recipient": null,
"sortOrder": null
}
]
}
}
Substitute¶
This is used to record a substitution for an stock movement item. This requires the user to enter a new product and quantity, as well as choose a reason code (i.e. STOCKOUT) and optionally add a comment that may help provide more context for the substitution.
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @substituteStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (substituteStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [{
"id": "ff808181644e51a401644e85891b0006",
"substitute": "true",
"newProduct.id":"ff80818155df9de40155df9e3312000d",
"newQuantity":100,
"reasonCode":"CLINICAL",
"comments":"A clinical decision that is none of your business",
}]
}
substitute
instruction.
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "BK71",
"product": {
"id": "ff8081816407132d0164071eec250001",
"productCode": "BK71",
"name": "product 1+",
"description": "This is the penultimate product",
"category": {
"id": "ROOT",
"name": "ROOT"
}
},
"palletName": null,
"boxName": null,
"statusCode": "SUBSTITUTED",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": 100,
"quantityRevised": null,
"substitutions": [
{
"id": "ff8081816458c881016458d22b5f0002",
"productCode": "00005",
"product": {
"id": "ff80818155df9de40155df9e33930011",
"productCode": "00005",
"name": "Similac Advance low iron 400g",
"description": null,
"category": {
"id": "1",
"name": "Medicines"
}
},
"palletName": null,
"boxName": null,
"statusCode": "APPROVED",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": null,
"quantityRevised": null,
"substitutions": [],
"reasonCode": null,
"comments": null,
"recipient": null,
"sortOrder": null
}
],
"reasonCode": "CLINICAL",
"comments": "A clinical decision that is none of your business",
"recipient": null,
"sortOrder": null
}
]
}
}
/api/generic/requisitionItem/:id
). Substitutions and modifications are just children requisition items
under the original requisition item.
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [{
"id": "ff8081816458c881016458ca819e0001",
"revert": "true"
},
{
"id": "ff8081816458c881016458ca819e0001",
"substitute": "true",
"newProduct.id":"ff80818155df9de40155df9e33930011",
"newQuantity":1000,
"reasonCode":"CLINICAL",
"comments":"A clinical decision that is none of your business",
},
{
"id": "ff8081816458c881016458ca819e0001",
"substitute": "true",
"newProduct.id":"ff80818155df9de40155df9e3312000d",
"newQuantity":500,
"reasonCode":"CLINICAL",
"comments":"A clinical decision that is none of your business",
}]
}
Exceptions¶
Cannot substitute a product that is not in the original product's list of available substitutions. See the Substitutions API.
{
"errorCode": 500,
"errorMessage": "Product 00004 General Pain Reliever is not a valid substitution of BK71 product 1+"
}
{
"errorCode": 500,
"errorMessage": "Product BK71 product 1+ is not a valid substitution of BK71 product 1+"
}
Cancel¶
Similar to a revision, this operation allows you to cancel the stock movement item.
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @cancelStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (cancelStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [
{
"id":"ff808181644e51a401644e85891b0006",
"cancel":"true",
"reasonCode":"BECAUSE",
"comments":"more information since BECAUSE is not a good reason"
}
]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "BK71",
"product": {
"id": "ff8081816407132d0164071eec250001",
"productCode": "BK71",
"name": "product 1+",
"description": "This is the penultimate product",
"category": {
"id": "ROOT",
"name": "ROOT"
}
},
"palletName": null,
"boxName": null,
"statusCode": "CANCELED",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": 100,
"quantityRevised": null,
"reasonCode": "BECAUSE",
"comments": "more information since BECAUSE is not a good reason",
"recipient": null,
"sortOrder": null
}
]
}
}
Revert¶
This allows you to revert any changes made to the stock movement item (including revisions, cancellations, and substitutions). However it does not allow you to revert deletes and updates.
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @revertStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (revertStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [
{
"id":"ff808181644e51a401644e85891b0006",
"revert":"true"
}
]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": [
{
"id": "ff808181644e51a401644e85891b0006",
"productCode": "BK71",
"product": {
"id": "ff8081816407132d0164071eec250001",
"productCode": "BK71",
"name": "product 1+",
"description": "This is the penultimate product",
"category": {
"id": "ROOT",
"name": "ROOT"
}
},
"palletName": null,
"boxName": null,
"statusCode": "PENDING",
"quantityRequested": 100,
"quantityAllowed": null,
"quantityAvailable": null,
"quantityCanceled": 0,
"quantityRevised": null,
"reasonCode": null,
"comments": null,
"recipient": null,
"sortOrder": null
}
]
}
}
Delete¶
This operation allows you to delete the stock movement item completely.
Request¶
$ curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @deleteStockMovementItem.json \
https://openboxes.ngrok.io/openboxes/api/stockMovements/ff808181644d5e5b01644e5007500001|jsonlint
Post Body (deleteStockMovementItem.json)¶
{
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "",
"identifier": "483ZSA",
"origin.id": "2",
"destination.id": "1",
"dateRequested": "06/23/2018",
"requestedBy.id": "1",
"lineItems": [
{
"id":"ff808181644e51a401644e85891b0006",
"delete":"true",
}
]
}
Response¶
{
"data": {
"id": "ff808181644d5e5b01644e5007500001",
"name": "my new stock movement",
"description": "my new stock movement",
"identifier": "483ZSA",
"origin": {
"id": "2",
"name": "Miami Warehouse"
},
"destination": {
"id": "1",
"name": "Boston Headquarters"
},
"dateRequested": "06/23/2018",
"requestedBy": {
"id": "1",
"name": "Mr Administrator",
"firstName": "Mr",
"lastName": "Administrator",
"email": "admin@pih.org",
"username": "admin"
},
"lineItems": []
}
}
Exceptions¶
This operation cannot be performed on a stock movement item that has been revised (due to a bug with foreign key constraints).
{
"errorCode": 500,
"errorMessage": "Cannot delete or update a parent row: a foreign key constraint fails (`openboxes_integration`.`requisition_item`, CONSTRAINT `FK5358E4D6405AC22D` FOREIGN KEY (`modification_item_id`) REFERENCES `requisition_item` (`id`))"
}
Picking¶
Request¶
curl -b cookies.txt -X POST -H "Content-Type: application/json" \
-d @pickStockMovementItems.json \
https://openboxes.ngrok.io/openboxes/api/stockMovementItems/ff808181646b260401646b5bf4cb002b
Post Body (pickStockMovementItem.json)¶
{
"picklistItems":[{
"id": "ff80818164787ed10164788a0f190022",
"inventoryItem.id": "ff8081816473166d0164731d419f000c",
"binLocation.id": "ff808181646d3ec101646d5e8e3e0003",
"quantityPicked":"10"
}]
}
NOTE: To create a pick list item, remove the ID field from the post body (value can also be empty string).
To edit an existing picklist item, specify the ID from the picklistItems
array. To delete the picklist item
assign a value of 0 to the quantityPicked
field.
Exceptions¶
This operation might fail if the quantity picked of the selected item is greater than the quantity on hand of that item in stock.