223: Review and approve submitted requisitions

 Test Case #:223

Test Case Name:  Review and approve submitted requisitions

System: OpenLMIS

Subsystem: requisition

Test case designed by: Paulina Borowa

Design Date:11.08.2016

Short description: Supervisor can access/view the submitted requisitions based on the supervisory hierarchy (which facilities the user is assigned to review/approve) -all requisition details are visable -the supervisor can see comments from the requisitioner (and authorizer when appropriate) -the supervisor can make changes to the "Approved Quantity" attribute -the supervisor can input text (string 250 characters) in the "Remarks" attribute -the supervisor can insert comments on the approved requistion -the supervisor can see comments made by the requisitioner and/or authorizer receive. Allows supervisor (or appropriate personnel) to review and approve submitted requisitions

                                                                                                                                                   

Pre – conditions:

                                                                                                                                                                                                                                                      


Step

Action

Expected system response

Comment

1

                                                                              

Create geographicLevels

In URL:

http://localhost:8080/api/geographicLevels/?access_token=f77791e5-5cb7-4787-92f9-b55b6d971791

Method: Post:

Example Body:

{

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}


                                                                                       

 Status 201 created         

id: a8db3899-896f-4e40-b912-f38a6af5b3ce

                                                 

2

Create geographicZone

In URL:

http://localhost:8080/api/geographicZones/?access_token=f77791e5-5cb7-4787-92f9-b55b6d971791

Method: Post:

Example Body:

{

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}


}

Status 201 Created ,

id: 3141d995-1f69-4400-be30-64ed564a0253



3

Create facilityType

In URL:

http://localhost:8080/api/facilityTypes/?access_token=b30d1dcf-9d04-4b10-a3a0-5f29b96b8a22

Method: Post

Example Body:

{

"code": "typecode",

"name": "typename"

}

Status 201 Created ,

id: d734497f-7e46-4915-9f05-83c0432fc158



4

Create facility

In URL:

http://localhost:8080/api/facilities/?access_token=b30d1dcf-9d04-4b10-a3a0-5f29b96b8a22

Method Post

Example body:

{

"code": "facilitycode",

"name": "facilityname",

"geographicZone": {

"id": "3141d995-1f69-4400-be30-64ed564a0253",

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}

},

"type": {

"id": "d734497f-7e46-4915-9f05-83c0432fc158",

"code": "typecode",

"name": "typename"

},

"active": true,

"enabled": true

}




Status 201 Created,

id: fb9ce60f-6557-4651-b9b9-efefccf76251



5

Create program:

In URL: 

http://localhost:8080/api/programs/?access_token=dd27b91f-91ae-4d9e-9f61-caf3abe870f7

Method: Post

Example Body:

{

"code": "programcode",

"name": "programname",

"periodsSkippable": true

}

Status 201 Created,

id: bebd5da3-b905-45b7-a474-85c3ba655f9d


6

Create schedule

In URL:

http://localhost:8080/api/processingSchedules/?access_token=f77791e5-5cb7-4787-92f9-b55b6d971791

Method: Post

Example Body:

{

"code": "schedulecode",

"name": "schedulename"

}

Status 201 Created,

id: 79650728-fb5e-4413-ba1e-c58e042415f9


7

Create periods

In URL:

http://localhost:8080/api/processingPeriods/?access_token=075fd2f4-0e58-4118-b673-3c29359c1a28

Method: Post

Example Body:

{

"processingSchedule": {

"id":"865f24e7-9496-4dc3-86d4-f00554da539b",

"code": "schedulecode",

"name": "schedulename"

},

"name": "periodname",

"description": "abc",

"startDate": "2016-09-05",

"endDate": "2016-09-15"

}

Status 201 Created,

"id": f9378770-e1f9-4dbc-85b2-482ce55cb776



8

Create RequisitionLine

URL:

http://localhost:8080/api/requisitionLines/?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

Method: POST

Body:

{

"id": "fc93a929-d62e-4fff-9f8f-4ad9df0a4e60",

"product": {

"id": "1752b457-0a4b-4de0-bf94-5a6a8002427e",

"code": "productCode",

"primaryName": "productName",

"dispensingUnit": "1",

"dosesPerDispensingUnit": 1,

"packSize": 1,

"packRoundingThreshold": 1,

"roundToZero": true,

"active": true,

"fullSupply": true,

"tracer": true,

"productCategory": {

"id": "3c840e6c-a2e6-482f-b794-90379fcbfe00",

"code": "categorycode",

"name": "categoryname",

"displayOrder": 32

}

},

"requisition": null,

"stockInHand": 2,

"beginningBalance": 2,

"totalReceivedQuantity": 2,

"totalLossesAndAdjustments": 2,

"stockOnHand": 2,

"requestedQuantity": 2,

"totalConsumedQuantity": 2,

"requestedQuantityExplanation": "abc",

"remarks": "sometest",

"approvedQuantity": 2

}

id: 1275b316-68c6-48c8-a343-b82b854eaa25

The attribute Remarks are not filled.
9

Create User

URL: http://localhost:8080/api/users?access_token=f77791e5-5cb7-4787-92f9-b55b6d971791

Method: POST

Body:

{

"username": "UserName12",

"email": "abc@gmail.com",

"firstName": "Name2F",

"lastName": "Last2N",

"verified": "true",

"active": "true",

"restrictLogin": "false",

"timezone":"CTM"

}

id: d8c1a779-53ca-435e-a86c-a7a786fe50b6


10

Create supervisoryNode

URL: http://localhost:8080/api/supervisoryNodes/?access_token=a2bb6f21-56aa-43e2-a9c5-940cb54d887a

Method: POST

Example body:


{

"code": "supervisoryNodeTest",

"facility": {

"id": "fb9ce60f-6557-4651-b9b9-efefccf76251",

"code": "facilitycode",

"name": "facilityname",

"geographicZone": {

"id": "3141d995-1f69-4400-be30-64ed564a0253",

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}

},

"type": {

"id": "d734497f-7e46-4915-9f05-83c0432fc158",

"code": "typecode",

"name": "typename"

},

"active": true,

"enabled": true

}

}

id: 5ec94f96-ac1b-4d1d-bd89-505f4f71c0e8


11


Create requisition:

In URL: http://localhost:8080/api/requisitions/?access_token=5a7d37fa-c57c-4c8e-8c3f-6d40021b01aa

Method: Post

Example Body

{

"id": "abd802e5-c181-453e-9b9a-087eedfb68b9",

"requisitionLines": [

{

"id": "4da79bc3-4188-4770-bace-991761dfb869",

"product": {

"id": "1752b457-0a4b-4de0-bf94-5a6a8002427e",

"code": "productCode",

"primaryName": "productName",

"dispensingUnit": 1,

"dosesPerDispensingUnit": 1,

"packSize": 1,

"packRoundingThreshold": 1,

"roundToZero": true,

"active": true,

"fullSupply": true,

"tracer": true,

"productCategory": {

"id": "3c840e6c-a2e6-482f-b794-90379fcbfe00",

"code": "categorycode",

"name": "categoryname",

"displayOrder": 32


}



},

"stockInHand": 2,

"beginningBalance": 2,

"totalReceivedQuantity": 2,

"totalLossesAndAdjustments": 2,

"stockOnHand": 2,

"requestedQuantity": 2,

"totalConsumedQuantity": 2,

"requestedQuantityExplanation": "abc",

"remarks": "sometest",

"approvedQuantity": 2

}

],

"facility": {

"id": "fb9ce60f-6557-4651-b9b9-efefccf76251",

"code": "facilitycode",

"name": "facilityname",

"geographicZone": {

"id": "3141d995-1f69-4400-be30-64ed564a0253",

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}

},

"type": {

"id": "d734497f-7e46-4915-9f05-83c0432fc158",

"code": "typecode",

"name": "typename"

},

"active": true,

"enabled": true

},

"program": {

"id": "bebd5da3-b905-45b7-a474-85c3ba655f9d",

"code": "programcode",

"name": "programname",

"periodsSkippable": true

},

"processingPeriod": {

"id": "f9378770-e1f9-4dbc-85b2-482ce55cb776",

"processingSchedule": {

"id": "79650728-fb5e-4413-ba1e-c58e042415f9",

"code": "schedulecode",

"name": "schedulename"

},

"name": "periodname",

"description": "abc",

"startDate": "2016-09-15",

"endDate": "2016-09-15"


},

"status": "INITIATED",

"supervisoryNode": {

"id": " 5ec94f96-ac1b-4d1d-bd89-505f4f71c0e8",

"code": "supervisoryNodeTest",

"facility": {

"id": "fb9ce60f-6557-4651-b9b9-efefccf76251",

"code": "facilitycode",

"name": "facilityname",

"geographicZone": {

"id": "3141d995-1f69-4400-be30-64ed564a0253",

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}

},

"type": {

"id": "d734497f-7e46-4915-9f05-83c0432fc158",

"code": "typecode",

"name": "typename"

}

}

}

}


                        

Status 201 Created,

id: f13a2c6f-8791-4329-b468-11634e0cedf1

Created requisition contain the entites created above.

12

Submit the previously created requisition.

URL: http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1/submit?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

Method: PUT

Body: the body of previously created requisition



13

Verify if the requisition is submitted.

Method: GET

URL: http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

OR

URL: http://localhost:8080/api/requisitions/submitted?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

Method: GET


14

Create special User with previously created supervisoryNode.

Method: POST

Example body:

{

"id": "35316636-6264-6331-2d34-3933322d3462",

"username": "trusted-client",

"password": "secret",

"email": "testowysoldevelo@gmail.com",

"firstName": "Name2F",

"lastName": "Last2N",

"verified": "true",

"active": "true",

"restrictLogin": "false",

"timezone":"CTM",

"supervisedNode": {

"id": "5ec94f96-ac1b-4d1d-bd89-505f4f71c0e8",

"code": "supervisoryNodeTest",

"facility": {

"id": "fb9ce60f-6557-4651-b9b9-efefccf76251",

"code": "facilitycode",

"name": "facilityname",

"geographicZone": {

"id": "3141d995-1f69-4400-be30-64ed564a0253",

"code": "geocode",

"name": "geoname",

"level": {

"id": "a8db3899-896f-4e40-b912-f38a6af5b3ce",

"code": "levelcode",

"name": "levelname",

"levelNumber": "32"

}

},

"type": {

"id": "d734497f-7e46-4915-9f05-83c0432fc158",

"code": "typecode",

"name": "typename"

},

"active": true,

"enabled": true

}

}


}


"id": "35316636-6264-6331-2d34-3933322d3462"

15

Authorize the first requisition.

URL: http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1/auhtorize?access_token=3492a106-c88a-41a6-840f-f794256802bd

Body: the body of previously created requisition

Method: PUT


16

Verify if the previously authorized requisition is waiting for the approval.

URL:  http://localhost:8080/api/requisitions/requisitions-for-approval?access_token=3492a106-c88a-41a6-840f-f794256802bd

Method: GET

Only the requisition with AUTHORIZED status, supervisoryNode associated with special User will be seen.

The requisitions created in points 17 and 18 will not be visible on the approval lists. The User with proper role is not associated with supervisoryNode.

17Create second requisition with different supervisoryNode.

The whole process of creation the second requisition is the same like for the first requisition. (follow the steps from 1 to 15 but do not repeat the step from point 14.)
18Create third requisition without supervisoryNode.
The whole process of creation the second requisition is the same like for the first requisition. (follow the steps from 1 to 15 but do not repeat the step described in points 10 and 14.)
19

Approve the first requisition.

URL: http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1/approve?access_token=3492a106-c88a-41a6-840f-f794256802bd

Method: PUT

Body: the body of previously created requisition


20

Add comments to the first requisition.

URL: http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1/comments?access_token=3492a106-c88a-41a6-840f-f794256802bd

Example body:

{

"body": "some information"

}

Status 201 Created,

id: 7cba6c5d-ffcf-404a-a2b5-61e03f9d0998

Comments are added to the first requisition when it has APPROVED status.
21

Verify if the comments are inserted (to the first requisition).

URL:

http://localhost:8080/api/requisitions/f13a2c6f-8791-4329-b468-11634e0cedf1/comments?access_token=3492a106-c88a-41a6-840f-f794256802bd

Method: GET


22

Change the Approved Quantity attribute.

URL: http://localhost:8080/api/requisitionLines?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

Method: POST

{

"id": "fc93a929-d62e-4fff-9f8f-4ad9df0a4e60",

"product": {

"id": "1752b457-0a4b-4de0-bf94-5a6a8002427e",

"code": "productCode",

"primaryName": "productName",

"dispensingUnit": "1",

"dosesPerDispensingUnit": 1,

"packSize": 1,

"packRoundingThreshold": 1,

"roundToZero": true,

"active": true,

"fullSupply": true,

"tracer": true,

"productCategory": {

"id": "3c840e6c-a2e6-482f-b794-90379fcbfe00",

"code": "categorycode",

"name": "categoryname",

"displayOrder": 32

}

},

"requisition": null,

"stockInHand": 2,

"beginningBalance": 2,

"totalReceivedQuantity": 2,

"totalLossesAndAdjustments": 2,

"stockOnHand": 2,

"requestedQuantity": 2,

"totalConsumedQuantity": 2,

"requestedQuantityExplanation": "abc",

"remarks": "sometest",

"approvedQuantity": "125"

}

Status 200 OK


Earlier, the approved quantity attribute was equals to 2.

23

Insert text into Remarks attribute.

URL:

http://localhost:8080/api/requisitionLines?access_token=a5c523c7-914e-4d12-8a55-78db5f2f57b6

Method; POST

Body:

{

"id": "fc93a929-d62e-4fff-9f8f-4ad9df0a4e60",

"product": {

"id": "1752b457-0a4b-4de0-bf94-5a6a8002427e",

"code": "productCode",

"primaryName": "productName",

"dispensingUnit": "1",

"dosesPerDispensingUnit": 1,

"packSize": 1,

"packRoundingThreshold": 1,

"roundToZero": true,

"active": true,

"fullSupply": true,

"tracer": true,

"productCategory": {

"id": "3c840e6c-a2e6-482f-b794-90379fcbfe00",

"code": "categorycode",

"name": "categoryname",

"displayOrder": 32

}

},

"requisition": null,

"stockInHand": 2,

"beginningBalance": 2,

"totalReceivedQuantity": 2,

"totalLossesAndAdjustments": 2,

"stockOnHand": 2,

"requestedQuantity": 2,

"totalConsumedQuantity": 2,

"requestedQuantityExplanation": "abc",

"remarks": "some test information are inserted",

"approvedQuantity": "125"

}

Status 200 OK

I cannot insert into Remarks attribute the text larger than 250 charts. When i try to do that, the 400 bad request status will be returned.

OpenLMIS: the global initiative for powerful LMIS software