# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) { 'name': 'Fusion — Service Charges', 'version': '19.0.1.0.0', 'category': 'Sales', 'summary': ( 'Standard service-call, labour, delivery, and installation ' 'products for Westin Healthcare and Mobility Specialties.' ), 'description': """ Fusion — Service Charges ========================== Seeds the service-billing product catalog used by Westin Healthcare and Mobility Specialties: * Standard Service: Service Call, Labour (hourly), In-Shop Labour, Rush Service Call, After-Hours Service Call * Lift & Elevating Service: Service Call, Labour (hourly) * Delivery / Pickup: Local, Outside Local Area, Rush, Lift Chair set-up, Hospital Bed set-up, Stairlift set-up, Stairlift Removal Loading pattern (deliberate): * Products are created via post_init_hook on FIRST install only. * No data XML is registered in the manifest, so ``-u`` upgrades never touch the records. Edits and deletions made by sales/ops survive every upgrade. * The hook is idempotent — sentinel xmlid check skips already- seeded products. Re-running the hook by hand is safe. * Re-installing the module after uninstall re-creates the products (the ir.model.data sentinels go away on uninstall, so the next install treats it as fresh). Per-km surcharges (Rush, Outside Local) ARE captured on the product as a hint in the product description; actual km billing is left as a manual SO-line tweak by the dispatcher (matches current shop workflow — formula-based pricing would need a sale.order.line.onchange to compute, out of scope here). """, 'author': 'Nexa Systems Inc.', 'website': 'https://www.nexasystems.ca', 'license': 'OPL-1', 'depends': [ 'product', 'uom', ], # Empty on purpose — no data XML. See the docstring on # _seed_service_charges_once() for why every product is created # imperatively via the post_init_hook. 'data': [], 'post_init_hook': 'post_init_hook', 'installable': True, 'application': False, 'auto_install': False, }