154 lines
10 KiB
XML
154 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<record id="view_social_commerce_dashboard_form" model="ir.ui.view">
|
|
<field name="name">social.commerce.dashboard.form</field>
|
|
<field name="model">social.commerce.dashboard</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Social Commerce Executive Dashboard" create="false" delete="false">
|
|
<field name="meta_connection_status" invisible="1"/>
|
|
<field name="whatsapp_connection_status" invisible="1"/>
|
|
<field name="whatsapp_webhook_verified" invisible="1"/>
|
|
<header>
|
|
<button name="action_test_meta_connection" string="Test Meta Connection" type="object" class="btn btn-primary" icon="fa-plug"/>
|
|
<button name="action_sync_products_now" string="Sync Products to Meta" type="object" class="btn btn-success" icon="fa-refresh"/>
|
|
<button name="action_test_whatsapp_connection" string="Test WhatsApp API" type="object" class="btn btn-info text-white" icon="fa-whatsapp"/>
|
|
<button name="action_retry_failed_all" string="Retry Failed Operations" type="object" class="btn btn-warning" icon="fa-repeat"/>
|
|
<button name="action_view_sync_logs" string="View Meta Logs" type="object" class="btn btn-secondary" icon="fa-list"/>
|
|
<button name="action_view_whatsapp_logs" string="View WhatsApp Logs" type="object" class="btn btn-secondary" icon="fa-envelope"/>
|
|
</header>
|
|
<sheet>
|
|
<div class="oe_title mb-4">
|
|
<h1>
|
|
<i class="fa fa-share-alt text-primary me-2"/>
|
|
<span>Social Commerce Command Center</span>
|
|
</h1>
|
|
<p class="text-muted">Single source of truth management for Meta Commerce Catalog, Instagram Shopping, and WhatsApp Business API.</p>
|
|
</div>
|
|
|
|
<!-- Top Metric Cards -->
|
|
<div class="row mb-4">
|
|
<!-- Meta Commerce Card -->
|
|
<div class="col-lg-6 mb-3">
|
|
<div class="card shadow-sm border-0 bg-light">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center justify-content-between mb-3 border-bottom pb-2">
|
|
<h4 class="card-title text-primary mb-0">
|
|
<i class="fa fa-facebook-square me-2"/> Meta / Instagram Catalog
|
|
</h4>
|
|
<div>
|
|
<span class="badge rounded-pill bg-success" invisible="meta_connection_status != 'connected'">Connected</span>
|
|
<span class="badge rounded-pill bg-danger" invisible="meta_connection_status != 'error'">Error</span>
|
|
<span class="badge rounded-pill bg-secondary" invisible="meta_connection_status != 'untested'">Not Tested</span>
|
|
</div>
|
|
</div>
|
|
<div class="row text-center mb-3">
|
|
<div class="col-4">
|
|
<h3 class="text-success mb-0"><field name="meta_synced_count"/></h3>
|
|
<small class="text-muted">Synced</small>
|
|
</div>
|
|
<div class="col-4">
|
|
<h3 class="text-warning mb-0"><field name="meta_pending_count"/></h3>
|
|
<small class="text-muted">Pending</small>
|
|
</div>
|
|
<div class="col-4">
|
|
<h3 class="text-danger mb-0"><field name="meta_failed_count"/></h3>
|
|
<small class="text-muted">Failed</small>
|
|
</div>
|
|
</div>
|
|
<div class="small text-muted">
|
|
<div><strong>Catalog ID:</strong> <field name="meta_catalog_id" readonly="1"/></div>
|
|
<div><strong>Last Synced:</strong> <field name="meta_last_sync" readonly="1"/></div>
|
|
<div class="mt-2">
|
|
<a href="/social/meta/catalog_feed.xml" target="_blank" role="button" class="btn btn-sm btn-outline-primary">
|
|
<i class="fa fa-rss me-1"/> View XML Catalog Feed
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- WhatsApp Platform Card -->
|
|
<div class="col-lg-6 mb-3">
|
|
<div class="card shadow-sm border-0 bg-light">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center justify-content-between mb-3 border-bottom pb-2">
|
|
<h4 class="card-title text-success mb-0">
|
|
<i class="fa fa-whatsapp me-2"/> WhatsApp Business Platform
|
|
</h4>
|
|
<div>
|
|
<span class="badge rounded-pill bg-success" invisible="whatsapp_connection_status != 'connected'">API Ready</span>
|
|
<span class="badge rounded-pill bg-danger" invisible="whatsapp_connection_status != 'error'">API Error</span>
|
|
<span class="badge rounded-pill bg-secondary" invisible="whatsapp_connection_status != 'untested'">Not Tested</span>
|
|
<span class="badge rounded-pill bg-info ms-1" invisible="not whatsapp_webhook_verified">Webhook Active</span>
|
|
</div>
|
|
</div>
|
|
<div class="row text-center mb-3">
|
|
<div class="col-4">
|
|
<h3 class="text-success mb-0"><field name="whatsapp_sent_count"/></h3>
|
|
<small class="text-muted">Dispatched</small>
|
|
</div>
|
|
<div class="col-4">
|
|
<h3 class="text-danger mb-0"><field name="whatsapp_failed_count"/></h3>
|
|
<small class="text-muted">Failed</small>
|
|
</div>
|
|
<div class="col-4">
|
|
<h3 class="text-info mb-0"><field name="whatsapp_inbound_count"/></h3>
|
|
<small class="text-muted">Inquiries</small>
|
|
</div>
|
|
</div>
|
|
<div class="small text-muted">
|
|
<div><strong>Business Number:</strong> <field name="whatsapp_phone" readonly="1"/></div>
|
|
<div><strong>Last Message:</strong> <field name="last_inbound_message" readonly="1"/></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Quick Information / Architecture Integrity -->
|
|
<notebook>
|
|
<page string="Integration Status & Compliance" name="compliance_info">
|
|
<group>
|
|
<group string="Meta & Instagram Shopping Rules">
|
|
<p class="text-muted">
|
|
- Odoo is the authoritative single source of truth.<br/>
|
|
- Products are synchronized to Meta Catalog with direct deep links to Odoo eCommerce product pages.<br/>
|
|
- Real-time batch push API is paired with hourly Catalog Feed (<a href="/social/meta/catalog_feed.xml" target="_blank" role="button">/social/meta/catalog_feed.xml</a>).<br/>
|
|
- Non-blocking error handling prevents API issues from interrupting website checkout.
|
|
</p>
|
|
</group>
|
|
<group string="WhatsApp Message Governance">
|
|
<p class="text-muted">
|
|
- Automated notifications strictly adhere to approved WhatsApp templates.<br/>
|
|
- Built-in deduplication prevents duplicate notifications per sale order event.<br/>
|
|
- Inbound webhook handles customer inquiries and automatically reports order progress without exposing customer financial data.
|
|
</p>
|
|
</group>
|
|
</group>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_social_commerce_dashboard" model="ir.actions.server">
|
|
<field name="name">Social Commerce Dashboard</field>
|
|
<field name="model_id" ref="model_social_commerce_dashboard"/>
|
|
<field name="state">code</field>
|
|
<field name="code">
|
|
dash = env['social.commerce.dashboard'].search([('company_id', '=', env.company.id)], limit=1)
|
|
if not dash:
|
|
dash = env['social.commerce.dashboard'].create({'company_id': env.company.id})
|
|
action = {
|
|
'type': 'ir.actions.act_window',
|
|
'res_model': 'social.commerce.dashboard',
|
|
'res_id': dash.id,
|
|
'view_mode': 'form',
|
|
'target': 'current',
|
|
}
|
|
</field>
|
|
</record>
|
|
</odoo>
|