FastBound Acquisition Module¶
Technical name: fastbound_acquisition
Version: 18.0.1.0.0
Category: Inventory / Compliance
Dependencies: fastbound_core, product_addons, purchase, stock, product, sale
The Acquisition module handles all inbound firearm workflows -- every scenario where a serialized item enters your inventory and must be recorded in your FastBound A&D book.
Acquisition Workflows¶
The module supports four distinct inbound paths, all managed through a unified fastbound.inbound model:
1. Standard Purchase Order Receipt¶
The most common workflow for receiving firearms from a distributor or manufacturer.
flowchart LR
A[Purchase Order] --> B[Receive Goods]
B --> C[Validate Receipt]
C --> D[FastBound Acquire]
D --> E[Print Labels]
Steps:
- Create a Purchase Order for your vendor.
- Receive the goods -- Odoo creates stock moves and lots with serial numbers.
- On the receipt (stock picking), click Acquire in FastBound to create the acquisition.
- The module sends each serialized item to FastBound via the
CreateAndCommitAPI. - FastBound assigns item numbers (A&D book numbers) that are saved back to each
stock.lot. - Print labels directly from the receipt or lot list.
Automatic Compliance Defaults
When a lot is created for a compliance product, the module automatically copies the product template's manufacturer, caliber, model, item type, and importer to the lot. You can override these per-serial if needed.
2. Dealer Transfer In¶
FFL-to-FFL transfers where another dealer ships firearms to you.
flowchart LR
A[Create Transfer In] --> B[Select FFL Contact]
B --> C[Add Items]
C --> D[Acquire in FastBound]
D --> E[Create Inventory]
Steps:
- Navigate to FastBound > Acquisitions > Dealer Transfer In and create a new record.
- Select the sending dealer -- use the FFL Lookup button to search by FFL number and auto-populate contact details from the ATF database.
- Add each firearm with serial number, manufacturer, model, caliber, and item type.
- Click Acquire to commit the acquisition in FastBound.
- Click Create Inventory to generate stock lots and quants in your warehouse.
Sequence Numbers
Transfer In documents are numbered with the TRANS/XXXX sequence.
3. Customer Trade-In¶
When a customer trades in a firearm, you acquire it and optionally issue trade credit.
flowchart LR
A[Create Trade-In] --> B[Select Customer]
B --> C[Add Items + Valuation]
C --> D[Acquire in FastBound]
D --> E[Create Inventory]
E --> F[Issue Trade Credit]
Steps:
- Navigate to FastBound > Acquisitions > Customer Trade-In and create a new record.
- Select the customer contact.
- Add each firearm with its trade value (the amount offered to the customer).
- Click Acquire to commit in FastBound.
- Click Create Inventory to add the items to stock.
- Trade credit is automatically tracked in the customer's Trade History (see Disposition module).
Sequence Numbers
Trade-In documents are numbered with the TRADE/XXXX sequence.
4. Direct Buy¶
Walk-in purchases where someone sells a firearm directly to your shop.
flowchart LR
A[Create Direct Buy] --> B[Add Items]
B --> C[Acquire in FastBound]
C --> D[Create Purchase Order]
D --> E[Validate PO]
Steps:
- Navigate to FastBound > Acquisitions > Direct Buy and create a new record.
- Optionally select a vendor (the individual selling the firearm).
- Add each firearm with its cost price.
- Click Acquire to commit in FastBound.
- Click Create Purchase Order to generate a PO for accounting purposes.
- Validate the PO to create the vendor bill.
Sequence Numbers
Direct Buy documents are numbered with the BUY/YYYY/XXXX sequence.
Inbound Document Lifecycle¶
All four workflows share the same state progression:
stateDiagram-v2
[*] --> New
New --> Acquired : Acquire in FastBound
New --> Cancelled : Cancel
Acquired --> "PO Created" : Create Purchase Order
"PO Created" --> "PO Validated" : Validate PO
Cancelled --> New : Reset to Draft
| State | Description |
|---|---|
| New | Document created, items being added |
| Acquired | Items committed in FastBound -- item numbers assigned |
| PO Created | Purchase order generated (Direct Buy only) |
| PO Validated | Purchase order confirmed (Direct Buy only) |
| Cancelled | Document cancelled (only if no items have been disposed) |
Serial Number Tracking¶
Stock Lot Extensions¶
The Acquisition module extends stock.lot with comprehensive FastBound tracking fields:
Identification Fields¶
| Field | Description |
|---|---|
| FastBound Item ID | UUID assigned by FastBound |
| Item Number | A&D book number assigned on acquisition |
| PSN Number | Point of Sale Number |
| External ID | Odoo lot ID sent to FastBound for cross-referencing |
| FastBound Account | Which FastBound configuration this lot is tracked in |
Status Fields¶
| Field | Description |
|---|---|
| Acquired | Whether the item has been acquired in FastBound |
| Disposed | Whether the item has been disposed in FastBound |
| Acquire Date | When the item was acquired |
| Dispose Date | When the item was disposed |
| Acquisition Type | How the item was acquired (Purchase, Trade-In, etc.) |
| Disposition Type | How the item was disposed (Sale, Transfer, etc.) |
| FastBound Status | Computed: Not Synced, Acquired, or Disposed |
Compliance Attributes¶
Each lot can override the product template's default compliance attributes:
| Field | Description |
|---|---|
| Manufacturer | Override product manufacturer for this serial |
| Caliber | Override product caliber |
| Model | Override product model |
| Item Type | Override product type (Pistol, Rifle, etc.) |
| Importer | Override product importer |
| Condition | Item condition (New, Used, Refurbished) |
Product Defaults
When a lot is created, compliance attributes are pre-populated from the product template. Override them on the lot only when a specific serial differs from the product default (e.g., a different caliber variant of the same SKU).
Lot Actions¶
| Button | Description |
|---|---|
| View in FastBound | Opens the item in the FastBound web interface |
| Fetch from FastBound | Pulls the latest item data from FastBound and updates the lot |
| Print Label | Prints a label for this serial number |
| Print Labels (batch) | Prints labels for all selected serial numbers |
Undispose¶
If a disposed item needs to be returned to inventory (e.g., a customer return), the Undo Disposition action:
- Calls
PUT /Items/{id}/Undisposein FastBound. - Clears the disposed flag and date on the lot.
- Resets the disposition type.
CreateAndCommit API Pattern¶
The module uses FastBound's optimized CreateAndCommit endpoint to reduce API calls by 75%:
1 API call per acquisition:
POST /Acquisitions/CreateAndCommit
{
"type": "Purchase",
"date": "2026-01-16T10:00:00.000Z",
"contactId": "abc-123-def",
"externalId": "PICK/00001",
"items": [
{
"serial": "ABC123",
"manufacturer": "Glock",
"model": "19",
"caliber": "9mm",
"type": "Pistol",
"externalId": "42"
}
]
}
4 API calls per acquisition:
POST /Acquisitions-- Create acquisitionPUT /Acquisitions/{id}/AttachContact/{contactId}-- Attach contactPOST /Acquisitions/{id}/Items-- Add itemsPOST /Acquisitions/{id}/Commit-- Commit acquisition
Chunked Processing¶
FastBound limits batches to 50 items. When acquiring more than 50 items (e.g., a large shipment), the module automatically chunks the request:
- Items are split into batches of 50.
- Each batch gets its own
CreateAndCommitcall. - External IDs are suffixed with the chunk number (e.g.,
PICK/00001-1,PICK/00001-2). - Results from all chunks are merged and matched to lot records by serial number.
Label Printing¶
The module includes four label templates for serial number tags:
Label Formats¶
| Format | Paper Size | Use Case |
|---|---|---|
| Standard | Default | General-purpose serial label |
| DYMO | 1.125" x 3.5" (30252) | DYMO LabelWriter thermal printers |
| Retail | 2.5" x 1.5" | Retail price tags for display cases |
| Full Page | Letter/A4 | Full-page labels for records or binders |
Label Content¶
All label formats include:
- Serial number
- Manufacturer and model
- Caliber and item type
- Item number (A&D book number)
- Barcode (if product has a UPC/barcode)
- Product name
Printing Labels¶
Labels can be printed from multiple places:
- Inbound document -- click Print Labels to print all acquired items.
- Stock lot form -- click Print Label for a single serial.
- Stock lot list -- select multiple lots and use Print > Serial Label from the action menu.
Compliance Attributes¶
Every item sent to FastBound requires certain compliance fields. The module validates these before submission:
Required Fields¶
| Field | Required For | Source |
|---|---|---|
| Serial Number | All items | Entered by user |
| Manufacturer | All items | Product template or lot override |
| Item Type | All items | Product template or lot override |
Optional Fields¶
| Field | Source |
|---|---|
| Model | Product template or lot override |
| Caliber | Product template or lot override |
| Importer | Product template or lot override |
| Condition | Lot-level field |
| UPC | Product barcode |
Validation Rules¶
The module validates before sending to FastBound:
- Serial number is not empty and does not exceed 100 characters.
- No duplicate serial numbers within the same batch.
- Manufacturer is set for every item.
- Item type is set for every item.
- For transfers/trade-ins: contact is selected and synced to FastBound.
Product Template Extensions¶
Products that represent firearms must be flagged for compliance tracking. The Acquisition module extends product.template with default compliance attributes that flow down to lots:
| Field | Description |
|---|---|
| Requires Compliance | Master flag -- marks this product as a serialized firearm |
| Manufacturer | Default manufacturer for new lots |
| Caliber | Default caliber |
| Model | Default model |
| Item Type | Default type (Pistol, Rifle, Shotgun, etc.) |
| Importer | Default importer |
Setting Up Products
When creating a new firearm product, check Requires Compliance and fill in the default compliance fields. Every serial number created for this product will inherit these defaults, saving time during receiving.
Purchase Order Integration¶
The Acquisition module extends purchase.order with a FastBound Account field (fb_config_id). When receiving goods from a PO:
- The receipt picking inherits the FastBound configuration from the PO.
- The Acquire in FastBound button on the picking processes all compliance lots.
- Item numbers from FastBound are written back to each
stock.lot.
Import Product Wizard¶
The Import Product wizard allows bulk creation of compliance products from a CSV or manual entry, pre-populating manufacturer, caliber, type, and other attributes from SmartList values.