/admin/item_transfers
Path: /admin/item_transfers
Namespace: admin
Resource: item_transfers
Overview
The ItemTransfer resource (registered as InvoiceLine) represents invoice line items with delivery and return tracking. Item transfers track delivered and returned quantities for invoice lines.
Relationships
Model Associations
ItemTransfer (InvoiceLine) connects to the following resources:
Invoice
- Type:
belongs_toviainvoice_id - Field:
invoice_id - Description: Parent invoice. Item transfers are invoice lines that track delivery and return information.
- Reverse: Invoice has many item transfers (
invoice.invoice_lines) - API Access:
- Direct: Included in item transfer response as
invoice_id - Filter:
GET /admin/item_transfers.json?q[invoice_id_eq]=123 - Nested:
GET /admin/invoices/:id/invoice_lines.json(item transfers for an invoice)
- Direct: Included in item transfer response as
- Related Documentation: Invoices
- Example: Get all item transfers for an invoice:javascript
const itemTransfers = await fetch('/admin/invoices/123/invoice_lines.json', { credentials: 'include', headers: { 'Accept': 'application/json' } }).then(r => r.json());
Item (Seller Item)
- Type:
belongs_toviaseller_item_id - Field:
seller_item_id - Description: Seller item associated with this line. Product from the seller's perspective.
- Reverse: Item has many item transfers as seller item (
item.invoice_lines_as_seller) - API Access:
- Direct: Included in item transfer response as
seller_item_id - Filter:
GET /admin/item_transfers.json?q[seller_item_id_eq]=123
- Direct: Included in item transfer response as
- Related Documentation: Items
Item (Buyer Item)
- Type:
belongs_toviabuyer_item_id(optional) - Field:
buyer_item_id - Description: Buyer item associated with this line. Product from the buyer's perspective (may differ from seller item).
- Reverse: Item has many item transfers as buyer item (
item.invoice_lines_as_buyer) - API Access:
- Direct: Included in item transfer response as
buyer_item_id(may be null) - Filter:
GET /admin/item_transfers.json?q[buyer_item_id_eq]=123
- Direct: Included in item transfer response as
- Related Documentation: Items
AccountingAccount (Multiple Accounts)
- Type:
belongs_tovia multiple foreign keys - Fields:
debit_account_id,credit_account_id,tax_debit_account_id,tax_credit_account_id - Description: Accounting accounts for debit, credit, and tax entries. Used for automatic accounting when invoice is confirmed.
- Reverse: AccountingAccount has many item transfers (via debit/credit/tax account assignments)
- API Access:
- Direct:
item_transfer.debit_account_id,item_transfer.credit_account_id, etc. - Filter:
GET /admin/item_transfers.json?q[debit_account_id_eq]=10
- Direct:
- Related Documentation: Accounting
Domain
- Type:
belongs_toviahost_id(through Invoice) - Field:
host_id(viainvoice.host_id) - Description: Tenant domain for multi-tenant scoping. Item transfers inherit domain from their parent invoice.
- Reverse: Domain has many item transfers (via invoices)
- API Access:
- Filter:
GET /admin/item_transfers.json?q[invoice_host_id_eq]=1(item transfers for invoices in domain)
- Filter:
- Related Documentation: Domains
Reverse Associations
The following resources connect to ItemTransfer:
PackingLine[] (if applicable)
- Type:
has_manyon PackingLine viainvoice_line_id - Description: Packing/shipping information for this item transfer. Links item transfers to shipping details.
- API Access:
- Filter:
GET /admin/packing_lines.json?q[invoice_line_id_eq]=123
- Filter:
- Related Documentation: Packing Lines
Relationship Patterns
Accessing Invoice Lines for Invoice
- Use Case: Get all item transfers (invoice lines) for a specific invoice
- Example: Via nested endpoint:javascript
const invoiceLines = await fetch('/admin/invoices/123/invoice_lines.json', { credentials: 'include', headers: { 'Accept': 'application/json' } }).then(r => r.json());
Filtering by Item
- Use Case: Get all item transfers using a specific item as seller item
- Example:javascript
const transfers = await fetch('/admin/item_transfers.json?q[seller_item_id_eq]=123', { credentials: 'include', headers: { 'Accept': 'application/json' } }).then(r => r.json());
Creating Item Transfer with Invoice
- Use Case: Create invoice line when creating an invoice
- Example:javascript
const invoice = await fetch('/admin/invoices.json', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ invoice: { invoice_type: 'invoice', seller_id: 1, buyer_id: 2, date: '2024-01-15', invoice_lines_attributes: [ { seller_item_id: 123, quantity: 10, unit_price_cents: 10000, delivered_at: '2024-01-16T10:00:00Z' } ] } }) }).then(r => r.json());
Key Features
- Invoice Association: Transfers are invoice lines (InvoiceLine model)
- Delivery Tracking: Track delivered_at and returned_at dates
- Accounting Integration: Track debit/credit codes and tax debit/credit codes
- Item Tracking: Track both seller and buyer items
Available Operations
List Item Transfers (GET)
Endpoint: GET /admin/item_transfers.json
Query Parameters:
q[field_predicate]=value- Ransack query filters for advanced filteringscope=name- Apply named scope (e.g.,debitable,creditable,taxed)page=N- Page number for paginationper_page=N- Items per page (default: 25)
Request Examples:
curl -X GET "https://your-company.erpax.com/admin/item_transfers.json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie"curl -X GET "https://your-company.erpax.com/admin/item_transfers.json?q[invoice_id_eq]=123" \
-H "Accept: application/json"curl -X GET "https://your-company.erpax.com/admin/item_transfers.json?scope=debitable" \
-H "Accept: application/json"JavaScript Example:
const response = await fetch('/admin/item_transfers.json', {
credentials: 'include',
headers: { 'Accept': 'application/json' }
});
const data = await response.json();Response (200 OK):
{
"item_transfers": [
{
"id": 1,
"invoice_id": 123,
"seller_item_id": 1,
"buyer_item_id": 2,
"quantity": 10,
"unit_price_cents": 10000,
"delivered_at": "2024-01-15T10:00:00Z",
"created_at": "2024-01-15T09:00:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 25,
"total_pages": 1,
"total_count": 5
}
}Show Item Transfer (GET /:id)
Endpoint: GET /admin/item_transfers/:id.json
Request Example:
curl -X GET "https://your-company.erpax.com/admin/item_transfers/1.json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie"Response (200 OK):
{
"item_transfer": {
"id": 1,
"invoice_id": 123,
"seller_item_id": 1,
"buyer_item_id": 2,
"quantity": 10,
"unit_price_cents": 10000,
"total_cents": 100000,
"delivered_at": "2024-01-15T10:00:00Z",
"returned_at": null,
"debit_account_id": 10,
"credit_account_id": 20,
"created_at": "2024-01-15T09:00:00Z"
}
}Create Item Transfer (POST)
Endpoint: POST /admin/item_transfers.json
Request Example:
curl -X POST "https://your-company.erpax.com/admin/item_transfers.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie" \
-d '{
"item_transfer": {
"invoice_id": 123,
"seller_item_id": 1,
"buyer_item_id": 2,
"quantity": 5,
"unit_price_cents": 10000
}
}'Response (201 Created):
{
"item_transfer": {
"id": 2,
"invoice_id": 123,
"seller_item_id": 1,
"buyer_item_id": 2,
"quantity": 5,
"unit_price_cents": 10000,
"created_at": "2024-01-15T14:30:00Z"
}
}Update Item Transfer (PATCH /:id)
Endpoint: PATCH /admin/item_transfers/:id.json
Request Example:
curl -X PATCH "https://your-company.erpax.com/admin/item_transfers/1.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie" \
-d '{
"item_transfer": {
"delivered_at": "2024-01-16T10:00:00Z"
}
}'JavaScript Example:
const response = await fetch('/admin/item_transfers/1.json', {
method: 'PATCH',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
item_transfer: {
delivered_at: '2024-01-16T10:00:00Z'
}
})
});
const data = await response.json();Response (200 OK):
{
"item_transfer": {
"id": 1,
"delivered_at": "2024-01-16T10:00:00Z",
"updated_at": "2024-01-16T10:00:00Z"
}
}Delete Item Transfer (DELETE /:id)
Endpoint: DELETE /admin/item_transfers/:id.json
Request Example:
curl -X DELETE "https://your-company.erpax.com/admin/item_transfers/1.json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie"JavaScript Example:
const response = await fetch('/admin/item_transfers/1.json', {
method: 'DELETE',
credentials: 'include',
headers: { 'Accept': 'application/json' }
});Response (204 No Content):
(empty response)Batch Actions
Endpoint: POST /admin/item_transfers/batch_action.json
Available batch actions:
- update - Update selected transfers with form fields (debit_code, credit_code, tax_debit_code, tax_credit_code, seller_item, buyer_item)
Request Example:
curl -X POST "https://your-company.erpax.com/admin/item_transfers/batch_action.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Cookie: session_cookie" \
-d '{
"batch_action": "update",
"collection_selection": [1, 2, 3],
"item_transfer": {
"debit_account_id": 10,
"credit_account_id": 20
}
}'Scopes
- all (default) - All item transfers
- debitable - Debitable transfers
- creditable - Creditable transfers
- taxed - Taxed transfers
- seller_item - Transfers with seller items
- buyer_item - Transfers with buyer items
- no_seller_item - Transfers without seller items
- no_buyer_item - Transfers without buyer items
- coded - Transfers with codes
- codeless - Transfers without codes
Usage Example:
GET /admin/item_transfers.json?scope=debitable
GET /admin/item_transfers.json?scope=taxedFilters
Available filters for searching and filtering item transfers:
- invoice_date - Date range filter - Filter by invoice date
- invoice_seller_code_equals - Filter by invoice seller code
- invoice_buyer_code_equals - Filter by invoice buyer code
- invoice_supplier_code_equals - Filter by invoice supplier code
- invoice_consignee_code_equals - Filter by invoice consignee code
- invoice_number_cont - Text filter - Search by invoice number (contains)
- code_or_name_or_description_cont - Text filter - Search by code, name, or description (contains)
- debit_account - Filter by debit account
- credit_account - Filter by credit account
- tax_debit_account - Filter by tax debit account
- tax_credit_account - Filter by tax credit account
- seller_item - Select filter - Filter by seller item
- buyer_item - Select filter - Filter by buyer item
- unit - Select filter - Filter by unit
- period - Select filter - Filter by period
- period_start - Date range filter - Filter by period start date
- period_end - Date range filter - Filter by period end date
- contract_start - Date range filter - Filter by contract start date
- contract_end - Date range filter - Filter by contract end date
- created_at - Date range filter - Filter by creation date
- updated_at - Date range filter - Filter by update date
Business Rules
- Invoice Association: Item transfers must be associated with an invoice
- Quantity Validation: Quantity must be greater than 0
- Accounting Integration: Debit and credit accounts are automatically assigned based on configuration
- Delivery Tracking: Delivered_at and returned_at dates track item movement