Sinh hoá đơn Lease recurring (Cron)
Sinh hoá đơn Lease recurring (Cron)
Phần tiêu đề “Sinh hoá đơn Lease recurring (Cron)”Cron job chạy 06:00 hàng sáng — scan tất cả HĐ active có billing_item đến hạn phát sinh → tạo Invoice draft cho FC review.
Nguyên tắc
Phần tiêu đề “Nguyên tắc”- Chỉ HĐ state =
activehoặcrenewedđược scan - Chỉ billing_item cadence recurring (
monthly,quarterly,yearly) mới sinh - Cadence
one-time→ sinh khi milestone linked →done - HĐ state =
draft/pending/closed/terminated→ skip
Nội dung Invoice sinh ra
Phần tiêu đề “Nội dung Invoice sinh ra”Mỗi Invoice có:
| Field | Value |
|---|---|
| Partner | contract.customer_id |
| Invoice date | Ngày cron chạy |
| Due date | Ngày phát sinh + payment_term.day (vd Net 30) |
| Journal | Customer Invoices (hoặc Lease nếu custom) |
| Currency | contract.currency_id |
| Lines | 1 line per billing_item đến hạn |
| Line description | "[Contract#] Kỳ tháng X/YYYY — <billing_item.name>" |
| Line amount | Amount theo cadence |
| Line tax | billing_item.tax_id (default VAT 10%) |
| State | Draft (nếu auto-post = OFF) hoặc Posted (nếu ON) |
Logic cadence
Phần tiêu đề “Logic cadence”| Cadence | Khi nào sinh |
|---|---|
| Monthly | Ngày 1 hàng tháng (hoặc ngày cụ thể theo billing_start_day) |
| Quarterly | Ngày 1 của tháng 1/4/7/10 |
| Yearly | Ngày 1/1 hoặc anniversary_date HĐ |
| One-time | Khi milestone linked → done |
Auto-post toggle
Phần tiêu đề “Auto-post toggle”Cấu hình → Company → tab Cấu hình → “Auto-post Lease Invoices”:
Cron CHỈ tạo draft. FC phải:
- Mở Hoá đơn → Bản nháp
- Review từng draft
- Confirm (= Post)
- (Optional) Send email KH
Khuyến nghị 3 tháng đầu để verify logic đúng.
Cron tạo draft + tự Post + gửi email KH ngay.
Bật khi:
- Đã verify workflow ổn (3+ tháng chạy manual)
- KH quen nhận HĐ auto
- Không cần review case-by-case
FC vẫn xem được HĐ đã post trong menu Hoá đơn → Customer Invoices.
Test cron manual
Phần tiêu đề “Test cron manual”Cron mặc định 06:00. Để test ngay (Admin):
- Bật dev mode
- Cấu hình → Technical → Automation → Scheduled Actions
- Tìm
Parkone: Sinh hoá đơn lease định kỳ - Click “Run Manually”
- Xem log:
- Tạo bao nhiêu Invoice
- Contract nào skip (không có billing_item đến hạn)
- Error nếu có
Kiểm tra HĐ mới sinh
Phần tiêu đề “Kiểm tra HĐ mới sinh”- Hoá đơn → Bản nháp — xem list draft
- Filter by “Ngày hoá đơn = today”
- Verify:
- Đúng KH
- Đúng số tiền
- Đúng tax
- Description rõ ràng
- Nếu OK → tick chọn tất cả → menu Action → Confirm (post batch)
Milestone-based one-time
Phần tiêu đề “Milestone-based one-time”Xem chi tiết Milestone editor → Invoice trigger.
Tóm tắt:
- Set milestone →
done - Cron 30 phút sau tạo Invoice draft
- Amount =
amount_pct × line.price_subtotal
Cấu hình cron
Phần tiêu đề “Cấu hình cron”Đại có thể đổi thời gian chạy cron:
- Dev mode → Technical → Scheduled Actions
Parkone: Sinh hoá đơn lease định kỳ- Đổi:
- Nextcall: lần chạy tiếp theo (auto reschedule)
- Interval Number + Type: 1 Days = mỗi ngày
- User: user cron chạy (mặc định admin — không đổi)
- Save
Khuyến nghị giữ default 06:00 daily.
HĐ nhiều lô, chung customer
Phần tiêu đề “HĐ nhiều lô, chung customer”Nếu KH có 3 HĐ với 3 KCN khác nhau, cron sẽ sinh 3 Invoices riêng (không merge).
Nếu KH muốn merge → tạo account.move group manual (Odoo hỗ trợ combine invoices).
Edge cases
Phần tiêu đề “Edge cases”KH huỷ HĐ giữa tháng
Phần tiêu đề “KH huỷ HĐ giữa tháng”- HĐ terminated ngày 15/8 → cron ngày 1/9 skip HĐ này
- Invoice tháng 8 đã sinh (từ 1/8) → FC prorate manual (chỉnh amount = amount × 15/31)
Escalation apply
Phần tiêu đề “Escalation apply”Cron dùng billing_item.get_amount_at_date(date) — auto compute escalation based on year vs HĐ start:
Năm 1-5: 50,000 VND/m²/yearNăm 6-10: 52,500...Không cần Đại làm gì.
Reject KH ban đầu
Phần tiêu đề “Reject KH ban đầu”- Nếu KH không active partner (
active=False) → cron skip - Nếu KH bị block (
x_supplier_status=blocked) → cron log warning
Cron chạy failed — làm sao?
Phần tiêu đề “Cron chạy failed — làm sao?”Menu Technical → Scheduled Actions → xem Last executed và Log.
Common errors:
account_move: partner_id required→ HĐ missing customer_id, sửa HĐno journal for currency→ thiếu journal cho currency, thêm trong Cấu hình → Journalsperiod locked→ fiscal period đã lock, sửa ngày Invoice hoặc unlock
Sinh nhầm — muốn xoá / regenerate?
Phần tiêu đề “Sinh nhầm — muốn xoá / regenerate?”- HĐ draft: xoá trực tiếp (icon 🗑️)
- HĐ posted nhưng chưa payment: menu Action → Reset to draft → sửa/xoá
- HĐ posted + có payment: KHÔNG xoá được. Tạo Credit Note để offset.
Cron chạy 2 lần trong ngày (test) → sinh trùng?
Phần tiêu đề “Cron chạy 2 lần trong ngày (test) → sinh trùng?”Cron có anti-duplicate: check billing_item.last_invoiced_month = current month → skip.
Nếu Đại reset field này (Advanced) → chạy lại sẽ sinh trùng. Chỉ dùng khi cần regenerate.