Here are some hand drawn visuals for the GUI.
This lists all the PO’s with option to search based on PO #, Supplier, Status, Total, Date, Last Update, etc. Similar to how products are displayed there is an actions drop down that allows actions to be print, send, change status, etc. This way bulk edits are possible.
You can edit your PO’s from and to sections if needed. The status can be changed and products can be added without refresh (similar on how associated simple products are added to config products. This method would always filter buy supplier / product relationships). Much like creating an order. Save and Save And Continue options. Cost and comment fields can be changed.
This is a different approach to the above but is product ordering from the product side of life. It simply lists all the products that are either backordered, meet or below their low levels or out of stock. You select the product and below in the suppliers box it auto pulls up the suppliers associated with the product. You choose the supplier you want. Select order type options (can be based on order history or manual entry). It fills in Qty Order field with amount based on order type. Has option to add backordered product to it. Comment field. Option to assign it to a pre-existing open PO or create a new PO. Click Save the list of all the products above refreshes to only list products that are not on a PO.
Here you would receive all your products based on the PO you selected from the PO List. Simply type in the Received field how many arrived or use a Quickscan feature that allows for barcode entry. The field searched can be set in Admin → Configuration → Purchase Orders section. The Quickscan would auto increment the Received field of the scanned product. Once products have been entered there is an option to commit quantities to database or simply save to come back later. Once committed to database the status would reflect Closed if all items ordered where received, Partial, if only some items where received. If just save, status would remain at Placed.