Skip to content

/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_to via invoice_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)
  • 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_to via seller_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
  • Related Documentation: Items
Item (Buyer Item)
  • Type: belongs_to via buyer_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
  • Related Documentation: Items
AccountingAccount (Multiple Accounts)
  • Type: belongs_to via 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
  • Related Documentation: Accounting
Domain
  • Type: belongs_to via host_id (through Invoice)
  • Field: host_id (via invoice.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)
  • Related Documentation: Domains

Reverse Associations

The following resources connect to ItemTransfer:

PackingLine[] (if applicable)
  • Type: has_many on PackingLine via invoice_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
  • 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 filtering
  • scope=name - Apply named scope (e.g., debitable, creditable, taxed)
  • page=N - Page number for pagination
  • per_page=N - Items per page (default: 25)

Request Examples:

bash
curl -X GET "https://your-company.erpax.com/admin/item_transfers.json" \
  -H "Accept: application/json" \
  -H "Cookie: session_cookie"
bash
curl -X GET "https://your-company.erpax.com/admin/item_transfers.json?q[invoice_id_eq]=123" \
  -H "Accept: application/json"
bash
curl -X GET "https://your-company.erpax.com/admin/item_transfers.json?scope=debitable" \
  -H "Accept: application/json"

JavaScript Example:

javascript
const response = await fetch('/admin/item_transfers.json', {
  credentials: 'include',
  headers: { 'Accept': 'application/json' }
});
const data = await response.json();

Response (200 OK):

json
{
  "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:

bash
curl -X GET "https://your-company.erpax.com/admin/item_transfers/1.json" \
  -H "Accept: application/json" \
  -H "Cookie: session_cookie"

Response (200 OK):

json
{
  "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:

bash
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):

json
{
  "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:

bash
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:

javascript
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):

json
{
  "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:

bash
curl -X DELETE "https://your-company.erpax.com/admin/item_transfers/1.json" \
  -H "Accept: application/json" \
  -H "Cookie: session_cookie"

JavaScript Example:

javascript
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:

bash
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:

bash
GET /admin/item_transfers.json?scope=debitable
GET /admin/item_transfers.json?scope=taxed

Filters

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

Released under an open source license.