FBA Transfer Tracker
Tracks every pending FBA stock-transfer Material Request against its linked Purchase Order so buyers can see what has been ordered and received versus what still needs to move to Amazon.
Purpose
- Purchasing/stock teams use it to follow FBA replenishment from Material Request → Purchase Order → receipt.
- Shows, per transfer line, how much is ordered and received against the quantity that needs transferring.
- Derives a per-line Status (Pending PO / Ordered / Partially Received / Received) so gaps are obvious.
- Handles UOM mismatches between the MR and the PO by comparing in base units.
How to Access
Desk > Reports > FBA Transfer Tracker, or /app/query-report/FBA%20Transfer%20Tracker.
Report type: Script Report. Reference DocType: Purchase Order.
Filters
This report has no filters.
Columns
| Column | Type | Description |
|---|---|---|
| Material Request | Link (Material Request) | The submitted Material Transfer MR driving the transfer. |
| Date | Date | MR transaction_date. |
| Item | Link (Item) | MR line item_code. |
| Item Name | Data | Item's item_name. |
| Target Warehouse | Link (Warehouse) | MR line warehouse (where stock is being moved to). |
| Qty to Transfer | Float | MR line qty in MR UOM. |
| MR UOM | Link (UOM) | Unit of the MR line. |
| Purchase Order | Link (Purchase Order) | The linked PO from MR line custom_purchase_order (blank if none yet). |
| Ordered Qty | Float | PO item qty (0 when no PO). |
| PO UOM | Link (UOM) | Unit of the PO line. |
| Received Qty | Float | PO item received_qty. |
| Status | Data | Derived state — see logic below. |
How It Works
The report joins Material Request → Material Request Item → Item, keeping only submitted (docstatus=1) MRs of type Material Transfer with status = "Pending", newest first. For lines carrying a custom_purchase_order, it batches one lookup against Purchase Order → Purchase Order Item (excluding cancelled POs, docstatus != 2) to pull ordered qty, received qty and the PO UOM, keyed by (po_name, item_code).
Because the MR and PO can use different UOMs, it loads UOM Conversion Detail for every needed (item_code, uom) pair and converts both quantities to base units before comparing. Status is then:
received_qty_base >= qty_to_transfer_base and qty_to_transfer_base > 0 → "Received"
received_qty_base > 0 → "Partially Received"
ordered_qty > 0 → "Ordered"
otherwise → "Pending PO"
All lookups are batched (PO items, conversion factors) to avoid N+1 queries.
flowchart LR
MR["Material Request<br/>type=Material Transfer<br/>docstatus=1, status=Pending"] --> MRI[Material Request Item]
MRI --> IT[Item: item_name]
MRI -->|custom_purchase_order| PO["Purchase Order Item<br/>ordered/received qty, PO UOM"]
MRI --> UCD["UOM Conversion Detail<br/>→ base-unit compare"]
PO --> UCD
UCD --> ST{"Status<br/>Pending PO / Ordered /<br/>Partially Received / Received"}
ST --> OUT[Report rows]
Notes
- Only Pending Material Transfer MRs appear; once an MR moves out of Pending it drops off the tracker.
- A line with no
custom_purchase_ordershows blank PO and status Pending PO. - Conversion factors default to
1.0when noUOM Conversion Detailrow matches, so a missing conversion can skew the base-unit comparison. - Cancelled POs (
docstatus = 2) are ignored. - Related: Navgold Stock Summary for warehouse-level quantities, Amazon FBA Stock Sync Health for the fulfillable side at Amazon.