$ 288.21
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Discuss (mail) • Invoicing (account) • Purchase (purchase) |
| Community Apps Dependencies | Show |
| Lines of code | 11946 |
| Technical Name |
qt_stock_card_kardex |
| License | OPL-1 |
| Website | https://odoootips.com |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Discuss (mail) • Invoicing (account) • Purchase (purchase) |
| Community Apps Dependencies | Show |
| Lines of code | 11946 |
| Technical Name |
qt_stock_card_kardex |
| License | OPL-1 |
| Website | https://odoootips.com |
| Versions | 16.0 17.0 18.0 19.0 |
Odoo 18 Community & Enterprise
Your accountant needs stock cards. Odoo doesn't have them. This module solves that.
- ✔ Stock card per product with running AVCO
- ✔ Summary of all products — opening to closing
- ✔ Instant Excel & PDF — 5-10x faster
- ✔ Inventory vs Accounting reconciliation
- ✔ Costing change detection + draft correction entries
- ✔ 375 automated tests — production-grade
This module does not create stock movements. It reads what Odoo already recorded and presents it as a professional stock card with running AVCO.
Only Inventory is required. The rest are detected automatically if installed.
VI.2 The Wizard
Inventory → Reports → Stock Card Valuation
| Period | Specific month or custom date range |
| Scope | Period Activity (auto) │ By Category │ Selected Products |
| Layout | Detailed (In/Out separated) or Simplified (net movement) |
| Output | Preview │ Stock Card Excel/PDF │ Summary Excel/PDF |
I.1 Summary View
All AVCO products in one table. Click any row to open its stock card.
I.2 Stock Card Detail
Every inventory movement for one product, in chronological order with running AVCO balance.
| Each row | Date, partner, reference, origin, movement type |
| In / Out | Quantity, unit cost, total value |
| Running balance | Qty, AVCO unit cost, total value after each movement |
| Clickable refs | Opens the source document (picking, invoice, MO, etc.) |
I.3 Previous Balance
First row of the stock card: accumulated Qty, AVCO cost, and value before the selected period. Calculated from all SVL records prior to the start date. In All-time mode, it is always zero.
II.1 Click to Open Source Documents
Every reference and origin tag is a clickable link. Opens the source document (receipt, delivery, PO, SO, MO) in a popup. Full audit trail from balance to transaction.
I.4 SVL Actual Panel
Real-time valuation panel at the top of the detail view. Compare it against the closing balance to detect movements after the cutoff date.
| Qty | Total from Stock Valuation Layers (quantity_svl) |
| Cost | Product's standard_price — the official AVCO unit cost |
| Value | Total inventory value (value_svl) |
II.2 Date Filter in Views
From/To date pickers in both views. Click Apply to recalculate instantly. Detail view includes an "All Time" button for full history.
II.3 Search & Group by Category
Search by name, code, or barcode. Group by category for collapsible subtotals. Pagination at 80 products/page. Filters and grouping carry over to Excel/PDF exports.
III.1 Stock Card Report
III.2 Summary Report
IV.1 Export One Product
IV.2 Export with Filters
V.1 Detailed vs Simplified
Switch with one click in the toolbar. Same data, different column layout.
| Detailed | Simplified | |
|---|---|---|
| Columns | 15 | 12 |
| Movements | Separated: In (Qty, Cost, Total) + Out (Qty, Cost, Total) | Merged: Movement (Qty, Cost, Total) — positive = in, negative = out |
| Best for | Accountants, auditors, tax reports | Managers, quick reviews, presentations |
V.2 Custom Report Colors
Choose header background and text color in the wizard. Applied consistently to views, Excel, and PDF exports.
VI.4 Stock Card from Product Form
Click the "Stock Card" button on any AVCO product form to open its full movement history. Works on both template and variant forms. No wizard needed.
VII.1 Reconciliation Bar
Collapsible bar at the top of Summary View. Every number is clickable (12 drill-down actions).
| Card Val. vs SVL | In report + Excluded = Total SVL? |
| SVL vs Accounting | SVL value = accounting balance on valuation account? |
VI.1 User Permissions
| Role | Access |
|---|---|
| User | Preview, search, navigate, open from product form |
| Manager | All above + Excel/PDF export + reconciliation + draft correction entries |
VI.3 Smart Product Selector
Odoo's standard widget sends one server request per product added/removed — freezes with 200+ products. This widget accumulates changes locally and syncs once. Search, browse, paginate (40/page), zero lag.
qt_m2m_tags_widget installs automatically.
II.4 Totals & SVL Verification
Grand Total (footer) and category subtotals are compared in real time against Odoo's SVL via the reconciliation bar.
I.1 Multiple Purchases
| Operation | Ref | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 1 | WH/IN/15631 | 100 | $10.00 | 100 | $10.00 | $1,000 |
| Receipt 2 | WH/IN/15632 | 50 | $12.00 | 150 | $10.67 | $1,600 |
| Receipt 3 | WH/IN/15633 | 80 | $9.00 | 230 | $10.09 | $2,320 |
II.1 Purchases + Sales
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Purchase 200 @ $8 | 200 | $8.00 | 200 | $8.00 | $1,600 | |
| Purchase 100 @ $10 | 100 | $10.00 | 300 | $8.67 | $2,600 | |
| Delivery 120 units | 120 | $8.67 | 180 | $8.67 | $1,560 |
I.2 Bill Price Difference
| Operation | Ref | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 100 @ $10 | WH/IN/15636 | 100 | $10.00 | 100 | $10.00 | $1,000 |
| Bill at $13 (+$3 diff) | F F001-94168 | 0 | +$3.00 | 100 | $13.00 | $1,300 |
| Receipt 50 @ $11 | WH/IN/15637 | 50 | $11.00 | 150 | $12.33 | $1,850 |
| Bill at $12 (+$1 diff) | F F001-97715 | 0 | +$1.00 | 150 | $12.67 | $1,900 |
I.3 Vendor Discount
| Operation | Ref | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 1 @ $100 | WH/IN/15638 | 1 | $100.00 | 1 | $100.00 | $100 |
| Bill at $90 (discount −$10) | F F001-95803 | 0 | −$10.00 | 1 | $90.00 | $90 |
III.1 Landed Cost After Partial Delivery
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 10 @ $100 | 10 | $100 | 10 | $100.00 | $1,000 | |
| Delivery 4 units | 4 | $100 | 6 | $100.00 | $600 | |
| Landed Cost $50 freight | 0 | +$5.00 | 6 | $105.00 | $630 |
II.2 Customer Return
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 10 @ $20 | 10 | $20.00 | 10 | $20.00 | $200 | |
| Delivery 4 units | 4 | $20.00 | 6 | $20.00 | $120 | |
| Customer return 2 units | 2 | $20.00 | 8 | $20.00 | $160 |
II.3 Vendor Return + Return of Return
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 10 @ $20 | 10 | $20.00 | 10 | $20.00 | $200 | |
| Vendor return 4 units | 4 | $20.00 | 6 | $20.00 | $120 | |
| Re-entry (return of return) | 4 | $20.00 | 10 | $20.00 | $200 |
IV.1 Inventory Adjustments & Scrap
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 10 @ $12 | 10 | $12.00 | 10 | $12.00 | $120 | |
| Positive adjustment +5 | 5 | $12.00 | 15 | $12.00 | $180 | |
| Negative adjustment −6 | 6 | $12.00 | 9 | $12.00 | $108 | |
| Scrap 2 units | 2 | $12.00 | 7 | $12.00 | $84 |
VI.1 Internal Transfer (Trace Row)
When you move stock between warehouses within the same company, the inventory value doesn't change — you still own the same products. The stock card shows a purple trace row so you can see the transfer happened.
| Operation | Ref | In | Out | Cost | Bal. Qty | AVCO | Value |
|---|---|---|---|---|---|---|---|
| Receipt 100 @ $8 | WH/IN/17087 | 100 | $8.00 | 100 | $8.00 | $800 | |
| Transfer 30 units to wh2 | WH/INT/00063 | 0 | 0 | $0.00 | 100 | $8.00 | $800 |
VI.2 Intercompany Transfer
When you transfer stock between two different companies, each company gets its own SVL. This is different from an internal transfer (same company) — here, real valuation entries are created.
| Operation | Ref | Qty | Value |
|---|---|---|---|
| Receipt 50 @ $20 | WH/IN/17088 | +50 | +$1,000 |
| Send to Company 2 | WH/OUT/06944 | -20 | -$400 |
| Operation | Ref | Qty | Value |
|---|---|---|---|
| Receive from Company 1 | PE Co/IN/00001 | +20 | +$400 |
V.1 MRP — Consume + Produce
| Operation | Ref | In | Out | Cost | Bal. Qty | AVCO | Value |
|---|---|---|---|---|---|---|---|
| Receipt 1 @ $10 | WH/IN/15662 | 1 | $10.00 | 1 | $10.00 | $10 | |
| Receipt 1 @ $20 | WH/IN/15663 | 1 | $20.00 | 2 | $15.00 | $30 | |
| MO consumption | WH/MO/00563 | 2 | $15.00 | 0 | $15.00 | $0 |
| Operation | Ref | In | Cost | Bal. Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| MO production 2 units | WH/MO/00563 | 2 | $15.00 | 2 | $15.00 | $30 |
V.2 MRP Byproduct — Cost Share
A factory produces juice from oranges. The main product is the juice, but the process also generates orange peel (byproduct). How much of the orange cost goes to the juice, and how much to the peel? That's what the BOM cost share defines.
V.3 MRP Unbuild — Reverse a Production
You produced something, but now you need to undo it — maybe the product was defective, or you need the raw materials back. Unbuild reverses the Manufacturing Order: the finished product leaves stock, and the components return.
| Operation | Ref | Qty | Value |
|---|---|---|---|
| MO production | WH/MO/00565 | +1 | +$15 |
| Unbuild (leaves stock) | UB/00124 | -1 | -$15 |
| Operation | Ref | Qty | Value |
|---|---|---|---|
| Receipt 1 @ $10 | WH/IN/15665 | +1 | +$10 |
| Receipt 1 @ $20 | WH/IN/15666 | +1 | +$20 |
| MO consumption | WH/MO/00565 | -1 | -$15 |
| Unbuild (returns to stock) | UB/00124 | +1 | +$15 |
I.5 Multicurrency Purchase (USD)
| Operation | Ref | PO Price | Rate | In | Cost (PEN) | Qty | AVCO | Value |
|---|---|---|---|---|---|---|---|---|
| Receipt | WH/IN/15677 | $30 USD | 3.72 | 10 | S/111.60 | 10 | S/111.60 | S/1,116.00 |
I.6 Purchase with Tax Included
| Operation | Gross | Tax | Net Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt | S/118.00 | 18% incl. | S/100.00 | 1 | S/100.00 | S/100 |
VI.3 Dropshipping
| Operation | In | Out | Cost | Qty | Value |
|---|---|---|---|---|---|
| Dropship incoming | 2 | S/25.00 | 2 | S/50 | |
| Dropship outgoing | 2 | S/25.00 | 0 | S/0 |
III.2 Landed Cost with Backorder
| Operation | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|
| Partial receipt 4 @ $10 | 4 | $10.00 | 4 | $10.00 | $40 |
| Landed Cost $20 | 0 | +$5.00 | 4 | $15.00 | $60 |
| Backorder 6 @ $10 | 6 | $10.00 | 10 | $12.00 | $120 |
IV.2 Negative Stock
| Operation | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 10 @ $50 | 10 | $50 | 10 | $50.00 | $500 | |
| Oversell 15 units | 15 | $50 | -5 | $50.00 | -$250 | |
| New receipt 20 @ $55 | 20 | $55 | 15 | $55.00 | $825 |
VII.2 Costing Method Changes
When someone changes a product's costing method (e.g. FIFO → AVCO), Odoo creates internal SVL entries to reset the valuation. These entries may not have matching accounting entries — leaving a gap between inventory and accounting.
- Empty SVL — Odoo removes all stock value with the old method (qty goes to 0)
- Replenish SVL — Odoo re-enters the same stock with the new method (qty restored)
- These two SVLs may not have matching accounting entries — this is a known Odoo behavior, not a bug in this module
- Detects — scans all SVLs and finds those created by method/valuation changes
- Analyzes — classifies the type of change and calculates the missing accounting value
- Proposes a draft correction — creates a journal entry in draft state with the suggested accounts and amounts for the accountant to review
III.5 Price Fluctuations
| Month | Operation | Ref | In | Out | Price | Bal. Qty | AVCO | Value |
|---|---|---|---|---|---|---|---|---|
| Jan | Buy 200 @ $5 | WH/IN/15656 | 200 | $5.00 | 200 | $5.00 | $1,000 | |
| Feb | Sell 80 | WH/OUT/06271 | 80 | $5.00 | 120 | $5.00 | $600 | |
| Mar | Buy 100 @ $8 (spike!) | WH/IN/15657 | 100 | $8.00 | 220 | $6.36 | $1,400 | |
| Apr | Buy 150 @ $5.50 | WH/IN/15658 | 150 | $5.50 | 370 | $6.01 | $2,225 |
VII.1 Monthly Close Workflow
At the end of each month, you need to verify that your inventory valuation matches your accounting. This module does it in one screen.
- In Card Val.: 27 products (S/17,637.50) — AVCO products with activity in the selected period, shown in the report
- Excluded: 3,046 products — products with SVL that are NOT in the report. Reasons:
- Cost method: FIFO or Standard — only AVCO products appear in the card valuation
- Archived — product was deactivated but still has SVL records from when it was active
- No activity in period — AVCO storable product but no movement in the selected date range (has historical SVL only)
- Total SVL: 3,073 products — the complete universe. If In report + Excluded = Total SVL, everything is accounted for
- 19 Non-storable (S/44,290.00) — products that were changed from Storable to Consumable or Service after stock movements were recorded. The old SVL records still exist. These are flagged as anomalies for review
- SVL Automated: S/17,637.50 — total valuation from Stock Valuation Layers (automated valuation products only)
- Acct. Balance: S/17,637.50 — balance on the inventory valuation account in accounting
- Difference: 0.00 ✔ — they match. Your inventory is reconciled with your books
- Open wizard → set the month → click Preview
- Expand the Reconciliation Bar → verify Difference = 0
- If difference ≠ 0: click the amount → see which products cause the gap → investigate in Odoo
- Use the summary view toolbar to export Excel or PDF if you need a copy for your records
I.4 Vendor Return + Credit Note
| Operation | Ref | In | Out | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|---|
| Receipt 10 @ $100 | WH/IN/15674 | 10 | $100 | 10 | $100.00 | $1,000 | |
| Vendor return (defective) | WH/OUT/06276 | 2 | $100 | 8 | $100.00 | $800 |
III.3 Manual Stock Revaluation
| Operation | Ref | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|---|
| Receipt 50 @ $20 | WH/IN/15654 | 50 | S/20.00 | 50 | S/20.00 | S/1,000 |
| Manual revaluation +S/250 | Revaluation | 0 | +S/5.00 | 50 | S/25.00 | S/1,250 |
III.4 Standard Price Change
| Operation | In | Cost | Qty | AVCO | Value |
|---|---|---|---|---|---|
| Current stock | 100 | $10.00 | 100 | $10.00 | $1,000 |
| Price change $10 → $12 | 0 | +$2.00 | 100 | $12.00 | $1,200 |
VII.3 Full SVL Coverage
Before buying this module, you probably want to know: "Will it show ALL my inventory movements?" Here is the complete answer.
- Purchase receipt (full or partial)
- Vendor bill with price difference
- Vendor discount (bill lower than PO)
- Multicurrency bill (exchange rate difference)
- Tax included purchases (net cost only)
- Sale delivery (full or partial)
- Customer return (at historical cost)
- Vendor return
- Return of return (re-entry)
- Landed cost (freight, customs)
- Manual stock revaluation
- Standard price change
- Negative stock rounding adjustment
- MRP: component consumed + finished good produced
- MRP: byproduct with cost share
- MRP: unbuild (reverse production)
- Dropshipping (paired in + out)
- Internal transfer (trace row for visibility)
- Intercompany transfer (SVL per company)
| Operation | Why it doesn't show |
|---|---|
| Customer invoice or credit note | It's an accounting document — no stock movement happens |
| Vendor bill at the same price as the PO | No price difference — no revaluation needed, nothing changed |
| Vendor credit note (without return) | Credit notes are accounting-only — they don't create SVL in Odoo 18 |
| Manual journal entries | Not linked to stock.move — the module reads only SVL-backed operations |
| Service or consumable products | Not inventoriable — Odoo doesn't create SVL for these product types |
| FIFO or Standard Cost products | This module is designed for Average Cost (AVCO) only |
1. Difference Analysis
Your inventory valuation (SVL) says S/3,757,742.87. Your accounting says S/3,758,289.01. That's a S/546.94 gap. Which products cause it? And why? This tool answers both questions.
- Top — Reconciliation Bar: SVL Automated = S/3,757,742.87 vs Acct. Balance = S/3,758,289.01 → Difference: -546.94
- Bottom — Difference Analysis (34 products): the module found 34 products where SVL ≠ Accounting, grouped by cause
- "Entry without stock move" (1 product): an accounting entry of S/500.00 exists on the valuation account but is not linked to any stock movement
- "Multiple causes" (33 products): a mix of unlinked entries + small rounding differences in linked entries
| Cause | What it means in plain language |
|---|---|
| Entry without stock move | Someone posted an accounting entry to the inventory account manually — it's not from a purchase, sale, or any stock operation |
| No accounting record | The product has inventory value in Odoo, but nothing was posted to the accounting account — usually happens when valuation mode was changed |
| Linked entry mismatch | Both inventory and accounting entries exist from real stock operations, but the totals differ slightly — typically rounding or currency conversion |
| Multiple causes | A combination: some entries are manual + some have rounding differences |
2. Anomaly Detection
Someone changed a product from Storable to Consumable or Service — but the old inventory valuation records still exist. The module finds these products automatically.
- Top: the reconciliation bar flags "19 NON-STOR (44,290)" — 13 Consumables + 6 Services that still have SVL records
- Bottom: clicking the badge opens the SVL list for these products — you can see each product's quantity and value
3. Orphan Accounting Entries
Accounting entries on the inventory valuation account that don't have a product assigned. They affect the SVL vs Accounting comparison but can't be attributed to any specific product.
- Journal entries on the valuation account without a product: someone posted a manual entry directly to the inventory account (e.g., account 2011100) without linking it to a product
- Data migration artifacts: imported accounting entries that don't have the product_id field populated
- Deleted products: the product was removed but the accounting entry remains
Detail Report — Stock Card
One sheet/page per product with every movement and running AVCO balance.
How it works
| Excel | XlsxWriter writes directly to disk (no RAM buffering). Atomic rename on completion. Ideal for large reports with 1,000+ products. |
| ReportLab generates in memory (BytesIO), then writes to disk. No wkhtmltopdf — 5-10x faster than standard Odoo reports. | |
| Delivery | Streaming via wrap_file() — file goes straight to your browser. Delete-on-read: file removed from disk as download starts. |
Benchmarks
| Volume | Excel | |
|---|---|---|
| 100 products | ~2s | ~3s |
| 500 products | ~8s | ~12s |
| 1,000 products | ~15s | ~25s |
| 114,932 rows | ~20s | ~58s (3,062 pages) |
Summary Report — Valuation Overview
All products in one table: opening, in, out, closing balance with Grand Total.
How it works
| Excel | XlsxWriter generates in memory (BytesIO) with merged headers and Grand Total row, then writes to disk for streaming delivery. |
| ReportLab generates in memory (BytesIO). A4 landscape, formatted for print. No wkhtmltopdf. | |
| Delivery | Same streaming engine: wrap_file() + delete-on-read. No database storage, no temp file accumulation. |
Benchmarks
| Volume | Excel | |
|---|---|---|
| 100 products | < 1s | < 1s |
| 500 products | ~2s | ~2s |
| 1,000 products | ~3s | ~3s |
| 3,070 products | ~3s | ~8s (70 pages) |
Install (5 minutes)
| 1 | Download the ZIP from Odoo Apps |
| 2 | Extract 3 folders into your addons path: qt_stock_card_kardex, qt_m2m_tags_widget, direct_download_base |
| 3 | Restart Odoo → Apps → Update Apps List → search "Stock Card" → Install |
Requirements
| Requirement | Where to set it | Why |
|---|---|---|
| AVCO Costing Method | Inventory → Configuration → Product Categories → Costing Method | Only AVCO products generate the valuation layers this module reads |
| Storable Products | Product form → Product Type = "Storable Product" | Consumables and Services don't create SVL records |
| Automated Valuation | Product Categories → Inventory Valuation = Automated | Needed for SVL vs Accounting reconciliation |
❓ Frequently Asked Questions
Before Purchasing
About the Module
- Community (self-hosted) ✔
- Enterprise on-premises (self-hosted) ✔
- Odoo.sh (cloud managed) ✔
- Odoo Online (SaaS) ✘
📧 Support & Guarantees
Quality Guaranteed
337 automated tests covering every business flow. If you find a bug, we fix it — no questions asked.
Fast Response
We respond within 24 hours on business days. Most issues are resolved within 48 hours.
Free Updates
Bug fixes and improvements are published as updates on Odoo Apps. Download anytime.
📞 Contact Us
🌐 Website
odootips.com- Your Odoo version (17.0.x.y.z)
- Module version (from Apps → module info)
- Steps to reproduce the issue
- Screenshots if applicable
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module
There are no ratings yet!
Excelent support
We had an issue purchasing the module, and Wilder responded very quickly with a solution.
Highly recommended
Great module, well-built and fully aligned with what is mentioned in the description. The support is outstanding—quick replies and effective solutions.
An excellent app and good support.
An excellent app and good support.