X2 Day-before visit reminder email
- New cron 'Fusion Repairs: Day-before visit reminders' (daily at 08:00)
walks repair.order records with at least one linked
fusion.technician.task scheduled for tomorrow and not yet reminded.
- Sends mail.template email_template_visit_day_before to the client.
- New x_fc_day_before_reminder_sent flag (copy=False) so the cron
never re-sends the same reminder.
- Template uses 4px blue accent, 600px max-width, shows the scheduled
date + technician name + equipment, with a 'reply to reschedule' note.
- Verified: cron flagged the test repair x_fc_day_before_reminder_sent=True
after running.
X4 Post-visit NPS / Google review email
- New cron 'Fusion Repairs: Send post-visit NPS emails' (hourly)
finds repairs in state='done' with write_date >= 24h ago and no NPS
email sent. Sends mail.template email_template_post_visit_nps.
- New x_fc_nps_email_sent flag so we never re-pester clients.
- Template uses 4px green accent + 'Leave a Google review' CTA button
linking to res.company.x_fc_google_review_url (or a sensible Google
search fallback when the company hasn't configured a review URL).
M3 Loaner auto-offer for long-running repairs
- Soft-bridges fusion_loaners_management without a hard dep -
cron_offer_loaner_for_long_repairs returns immediately if the
fusion.loaner.checkout model isn't installed.
- Walks repair.order records open longer than
fusion_repairs.loaner_offer_threshold_days (ICP, default 3 days)
with no existing loaner-offer activity.
- Posts a 'Repair: Offer Loaner' activity (new mail.activity.type)
assigned to the repair responsible.
- New x_fc_loaner_offered flag to prevent daily re-posting.
- Manual 'Offer Loaner' button on repair header opens the
fusion.loaner.checkout wizard pre-filled with partner + SO.
- Daily cron runs at 08:30.
Email + ICP + cron wiring:
- 2 new mail.template records (visit_day_before, post_visit_nps)
- 1 new mail.activity.type (loaner_offer)
- 3 new ir.cron records (day-before, NPS, loaner)
- 1 new ir.config_parameter (loaner_offer_threshold_days)
- 1 new header button (Offer Loaner) on repair.order
Verified end-to-end on local westin-v19:
X2 setup repair: RO-202605-12 task: TASK-00045
day-before flag after cron: True (expected True)
M3 loaner model not installed - cron correctly no-op'd
(no flag set, no activity posted, no error - the soft-dep guard works)
Bumped to 19.0.1.3.0.
Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
3.2 KiB
XML
67 lines
3.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data noupdate="1">
|
|
<!-- Feature toggles -->
|
|
<record id="param_enable_email_notifications" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.enable_email_notifications</field>
|
|
<field name="value">True</field>
|
|
</record>
|
|
|
|
<!-- Outstanding balance warning threshold (CAD) - C5 -->
|
|
<record id="param_outstanding_balance_threshold" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.outstanding_balance_threshold</field>
|
|
<field name="value">100.00</field>
|
|
</record>
|
|
|
|
<!-- Duplicate-call detection window (days) - C1 -->
|
|
<record id="param_duplicate_call_window_days" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.duplicate_call_window_days</field>
|
|
<field name="value">14</field>
|
|
</record>
|
|
|
|
<!-- Pricing variance reconciliation - Phase 2 -->
|
|
<record id="param_variance_threshold_pct" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.variance_threshold_pct</field>
|
|
<field name="value">20</field>
|
|
</record>
|
|
<record id="param_variance_threshold_amount" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.variance_threshold_amount</field>
|
|
<field name="value">100.00</field>
|
|
</record>
|
|
|
|
<!-- Office follow-up cron toggles - Phase 3 -->
|
|
<record id="param_followup_maintenance_enabled" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.followup_maintenance_enabled</field>
|
|
<field name="value">True</field>
|
|
</record>
|
|
<record id="param_followup_repair_no_tech_enabled" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.followup_repair_no_tech_enabled</field>
|
|
<field name="value">True</field>
|
|
</record>
|
|
<record id="param_followup_overdue_visit_enabled" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.followup_overdue_visit_enabled</field>
|
|
<field name="value">True</field>
|
|
</record>
|
|
<record id="param_followup_unpaid_invoice_enabled" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.followup_unpaid_invoice_enabled</field>
|
|
<field name="value">True</field>
|
|
</record>
|
|
|
|
<!-- Public client portal - Phase 1+ -->
|
|
<record id="param_client_portal_url" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.client_portal_url</field>
|
|
<field name="value">/repair</field>
|
|
</record>
|
|
<record id="param_client_portal_rate_limit_per_hour" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.client_portal_rate_limit_per_hour</field>
|
|
<field name="value">10</field>
|
|
</record>
|
|
|
|
<!-- M3: post a loaner-offer activity if a repair has been open this long. -->
|
|
<record id="param_loaner_offer_threshold_days" model="ir.config_parameter">
|
|
<field name="key">fusion_repairs.loaner_offer_threshold_days</field>
|
|
<field name="value">3</field>
|
|
</record>
|
|
</data>
|
|
</odoo>
|