Account Transfer Documentation¶
Overview¶
The Account Transfer module (account.transfer) manages fund transfers between bank accounts, cash accounts, or other GL accounts. Transfers create balanced journal entries moving funds from one account to another, supporting multi-currency transfers with exchange rate handling and tracking category allocation.
Model Information¶
Model Name: account.transfer
Display Name: Transfer
Name Field: date
Key Fields: None (auto-increment ID)
Default Sort Order: date desc, id desc
Features¶
- ✅ Multi-company support
- ✅ Multi-currency with exchange rates
- ✅ State workflow (draft/posted/voided)
- ✅ Automatic journal entry creation
- ✅ Tracking category support
- ✅ Sequence number generation
- ✅ Document attachments
Key Fields Reference¶
Core Transfer Fields¶
| Field | Type | Required | Description |
|---|---|---|---|
date |
Date | ✅ | Transfer date |
number |
Char | ✅ | Transfer number (auto-generated) |
account_from_id |
Many2One | ✅ | Source account |
account_to_id |
Many2One | ✅ | Destination account |
amount |
Decimal | ✅ | Amount leaving source account |
amount_received |
Decimal | ✅ | Amount received in destination (for currency conversion) |
ref |
Char | ❌ | Reference/memo |
state |
Selection | ❌ | Draft/Posted/Voided |
company_id |
Many2One | ❌ | Company (auto-filled) |
Accounting Fields¶
| Field | Type | Description |
|---|---|---|
move_id |
Many2One | Generated journal entry |
track_id |
Many2One | Tracking category (Track-1) |
track2_id |
Many2One | Tracking category (Track-2) |
Related Fields¶
| Field | Type | Description |
|---|---|---|
comments |
One2Many | Comments and notes |
documents |
One2Many | Document attachments |
State Workflow¶
| State | Description |
|---|---|
| draft | Initial state, can be edited or deleted |
| posted | Transfer recorded, journal entry created |
| voided | Transfer cancelled, journal entry voided |
API Methods¶
1. Create Transfer¶
Method: create(vals, context)
Creates transfer in draft state with auto-generated number.
Example:
transfer_id = get_model("account.transfer").create({
"date": "2025-01-15",
"account_from_id": bank_account_id,
"account_to_id": cash_account_id,
"amount": 5000.00,
"amount_received": 5000.00,
"ref": "Petty cash replenishment"
})
2. Post Transfer¶
Method: post(ids, context)
Posts transfer and creates journal entry.
Behavior: 1. Validates accounts and amounts 2. Creates balanced journal entry: - Debit: To Account - Credit: From Account 3. Handles currency conversion if needed 4. Sets state to "posted"
Example:
Journal Entry Created:
3. Void Transfer¶
Method: void(ids, context)
Voids posted transfer.
Example:
4. To Draft¶
Method: to_draft(ids, context)
Reverts posted transfer to draft (voids and deletes journal entry).
Example:
5. Do Transfer (UI Action)¶
Method: do_transfer(ids, context)
Posts transfer and shows success message.
Common Use Cases¶
Use Case 1: Simple Bank-to-Cash Transfer¶
# Transfer from bank to petty cash
transfer_id = get_model("account.transfer").create({
"date": "2025-01-15",
"account_from_id": bank_account_id,
"account_to_id": petty_cash_id,
"amount": 1000.00,
"amount_received": 1000.00,
"ref": "Weekly petty cash"
})
get_model("account.transfer").post([transfer_id])
print("✓ Transfer posted")
Use Case 2: Multi-Currency Transfer¶
# Transfer from USD bank to THB bank
# Rate: 1 USD = 35 THB
usd_bank_id = get_model("account.account").search([
["code", "=", "1110"]
])[0]
thb_bank_id = get_model("account.account").search([
["code", "=", "1120"]
])[0]
transfer_id = get_model("account.transfer").create({
"date": "2025-01-15",
"account_from_id": usd_bank_id,
"account_to_id": thb_bank_id,
"amount": 1000.00, # 1000 USD
"amount_received": 35000.00, # 35,000 THB
"ref": "Currency conversion"
})
get_model("account.transfer").post([transfer_id])
# System handles currency conversion automatically
Use Case 3: Inter-Bank Transfer¶
# Transfer between two bank accounts
transfer_id = get_model("account.transfer").create({
"date": "2025-01-15",
"account_from_id": bank_a_id,
"account_to_id": bank_b_id,
"amount": 50000.00,
"amount_received": 50000.00,
"ref": "Fund reallocation"
})
get_model("account.transfer").post([transfer_id])
Use Case 4: Transfer with Tracking¶
# Transfer with department tracking
transfer_id = get_model("account.transfer").create({
"date": "2025-01-15",
"account_from_id": main_bank_id,
"account_to_id": project_bank_id,
"amount": 100000.00,
"amount_received": 100000.00,
"ref": "Project Alpha funding",
"track_id": project_alpha_id # Track to project
})
get_model("account.transfer").post([transfer_id])
Use Case 5: Void Transfer¶
# Void incorrect transfer
transfer = get_model("account.transfer").browse([transfer_id])[0]
if transfer.state == "posted":
get_model("account.transfer").void([transfer_id])
print("✓ Transfer voided")
Best Practices¶
1. Use Clear References¶
# Good: Descriptive reference
"ref": "Weekly petty cash replenishment - Week 3"
# Less helpful: Generic
"ref": "Transfer"
2. Verify Amounts for Currency Transfers¶
# Calculate received amount based on exchange rate
from_account = get_model("account.account").browse([from_account_id])[0]
to_account = get_model("account.account").browse([to_account_id])[0]
amount_sent = 1000.00
exchange_rate = 35.0
amount_received = get_model("currency").convert(
amount_sent,
from_account.currency_id.id,
to_account.currency_id.id,
date="2025-01-15"
)
transfer = {
"amount": amount_sent,
"amount_received": amount_received
}
3. Always Post Transfers¶
# Good: Post after creation
transfer_id = get_model("account.transfer").create({...})
get_model("account.transfer").post([transfer_id])
# Avoid: Leaving in draft indefinitely
# (Doesn't create accounting entries until posted)
Database Constraints¶
Delete Restriction¶
Related Models¶
| Model | Relationship | Description |
|---|---|---|
account.account |
Many2One | Source and destination accounts |
account.move |
Many2One | Generated journal entry |
account.track.categ |
Many2One | Tracking categories |
company |
Many2One | Multi-company support |
sequence |
Referenced | Transfer number generation |
Version History¶
Last Updated: 2025-12-16 Model Version: account_transfer.py Framework: Netforce
Additional Resources¶
- Account Documentation:
account.account - Journal Entry Documentation:
account.move - Currency Documentation:
currency
This documentation is generated for developer onboarding and reference purposes.