Nabin Hait
498cd2b371
refactor(sales_invoice): extract non-GL services (Phase 7)
Split the sales_invoice.py monolith into focused service modules under
sales_invoice/services/:
- fixed_assets.py — FixedAssetService (depreciation, disposal, split)
- inter_company.py — validate/link/unlink inter-company docs
- loyalty.py — LoyaltyService (earn, redeem, delete points)
- pos.py — POSService + POS free functions
- status.py — StatusService + is_overdue / get_discounting_status
- timesheet_billing.py — TimesheetBillingService
Lifecycle hooks (validate/on_submit/on_cancel) call services directly;
no thin shims. The 7 methods POS Invoice calls via self.* are kept on
the class with an explicit comment. @frappe.whitelist() doc-methods and
framework hooks (set_status, set_indicator) stay on the class.
sales_invoice.py: 2156 → 1205 lines. All 29 snapshot + 121 SI tests green.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 12:52:26 +05:30
..
2026-05-31 12:52:26 +05:30
2026-05-29 13:38:00 +05:30
2026-03-18 20:59:35 +05:30
2026-05-29 16:56:40 +05:30
2025-06-09 18:06:16 +05:30
2024-03-27 16:06:04 +05:30
2026-05-28 20:38:25 +05:30
2026-05-29 13:26:31 +05:30
2026-03-17 10:17:32 +05:30
2026-04-23 15:40:22 +00:00
2026-05-20 08:39:24 +00:00
2024-08-17 01:50:55 +02:00
2026-05-24 14:47:38 +02:00
2026-03-18 20:59:38 +05:30
2026-05-29 13:20:50 +05:30
2026-05-20 08:39:24 +00:00
2026-03-19 12:04:31 +05:30
2026-05-22 16:47:46 +05:30
2026-05-21 12:04:45 +05:30
2026-03-18 20:59:35 +05:30
2026-05-28 17:13:23 +05:30
2025-11-17 13:20:57 +05:30
2026-05-29 12:19:09 +05:30
2026-05-22 01:13:12 +05:30
2026-05-21 20:05:56 +05:30
2026-05-29 12:45:32 +05:30
2026-05-29 13:28:37 +05:30
2026-04-20 16:58:35 +05:30
2026-03-24 11:57:02 +05:30
2026-03-25 14:55:05 +05:30
2026-05-24 12:27:48 +05:30
2026-05-04 14:06:59 +05:30
2026-05-19 23:13:30 +05:30
2026-05-09 23:14:58 +05:30
2026-01-13 12:15:21 +05:30
2024-11-24 00:37:42 +01:00
2025-09-03 12:36:44 +05:30
2026-05-19 21:07:52 +05:30
2024-11-17 15:05:33 +01:00
2026-05-20 08:39:24 +00:00