How Inspection to Invoice/Event Conversion Works
Source: autosoft-workshop/app/controllers/inspections_controller.rb
- Converting an inspection back to an invoice requires a default labor product to be configured in the company's inspection settings
- The inspection must be in finalized status before it can be converted to an invoice — draft inspections cannot be converted
- Only approved items are transferred to the invoice — unapproved and refused items are excluded
- When transferring, items are grouped by product_id — multiple inspection items with the same product become a single invoice line
- PartsTech integration bypasses grouping and creates individual line items instead of consolidated ones
- When an inspection item has no estimated time, it defaults to 1 hour during transfer
- Descriptions are truncated to 255 characters when multiple items are combined into one line — long descriptions will lose their tail
- Unit price logic: if the averaged price of grouped items is greater than 0, that average is used; otherwise customer-specific pricing applies; final fallback is the default product price
- Motor Labour integration also overrides the grouping behavior, creating separate line items similar to PartsTech
Support scenarios
- "I can't convert the inspection to an invoice" → check that a default labor product is set in inspection settings AND the inspection is finalized
- "Not all items came through to the invoice" → only approved items transfer; unapproved or refused items are intentionally excluded
- "The invoice has fewer lines than I expected" → items with the same product are grouped into one line; PartsTech and Motor Labour items are exceptions
- "The price on the invoice doesn't match what I expected" → pricing uses averaged values for grouped items, then falls back to customer-specific, then default product pricing
- "The description got cut off on the invoice" → descriptions are truncated to 255 characters when items are combined
- "The hours are wrong on the transferred item" → blank estimated time defaults to 1 hour during conversion