282 lines
18 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="apps_page_template" name="Dine360 Apps Marketplace Page">
<t t-call="dine360_dashboard.dashboard_layout">
<t t-set="active_page" t-value="'apps'"/>
<!-- Page Title & Header -->
<section class="o_page_header">
<div>
<h1 class="o_heading_title">Apps</h1>
<p class="o_heading_subtitle">Integrated Dine360 ecosystem suite, specialized restaurant modules, and third-party channels</p>
</div>
<div class="o_header_controls">
<div class="o_status_tag">
<span class="o_green_dot"/>
<span>Ecosystem: All Services Operational</span>
</div>
<a href="/web#action=base.open_module_tree" class="o_btn_white_small py-2 px-3">
<i class="fa fa-cubes me-1"/> Odoo App Store
</a>
</div>
</section>
<!-- Row 1: KPI Summary Cards -->
<section class="o_kpi_grid mb-4">
<!-- KPI 1: Active Modules -->
<div class="o_kpi_card">
<div class="o_kpi_top">
<div class="o_kpi_icon_box bg-red-light text-danger">
<i class="fa fa-th-large fs-5"/>
</div>
<span class="o_kpi_trend text-danger">Active</span>
</div>
<div class="o_kpi_label">Dine360 Modules</div>
<div class="o_kpi_number">9 Modules</div>
<div class="o_kpi_footer">
<span class="o_kpi_sub">Installed &amp; licensed</span>
<svg class="o_sparkline" viewBox="0 0 100 30" preserveAspectRatio="none">
<path d="M0 25 Q20 20 50 18 T100 10" fill="none" stroke="#ef4444" stroke-width="2.5" stroke-linecap="round"/>
</svg>
</div>
</div>
<!-- KPI 2: Service Channels -->
<div class="o_kpi_card">
<div class="o_kpi_top">
<div class="o_kpi_icon_box bg-green-light text-success">
<i class="fa fa-globe fs-5"/>
</div>
<span class="o_kpi_trend text-success">Connected</span>
</div>
<div class="o_kpi_label">Connected Channels</div>
<div class="o_kpi_number">4 Channels</div>
<div class="o_kpi_footer">
<span class="o_kpi_sub">POS, Web, WhatsApp, Uber</span>
<svg class="o_sparkline" viewBox="0 0 100 30" preserveAspectRatio="none">
<path d="M0 20 Q30 15 60 22 T100 5" fill="none" stroke="#16a34a" stroke-width="2.5" stroke-linecap="round"/>
</svg>
</div>
</div>
<!-- KPI 3: Hardware Printers -->
<div class="o_kpi_card">
<div class="o_kpi_top">
<div class="o_kpi_icon_box bg-amber-light text-warning">
<i class="fa fa-print fs-5"/>
</div>
<span class="o_kpi_trend text-warning">Ready</span>
</div>
<div class="o_kpi_label">Hardware Devices</div>
<div class="o_kpi_number">Thermal KOT</div>
<div class="o_kpi_footer">
<span class="o_kpi_sub">QZ tray driver synced</span>
<svg class="o_sparkline" viewBox="0 0 100 30" preserveAspectRatio="none">
<path d="M0 15 Q40 25 70 18 T100 12" fill="none" stroke="#f59e0b" stroke-width="2.5" stroke-linecap="round"/>
</svg>
</div>
</div>
<!-- KPI 4: System Health -->
<div class="o_kpi_card">
<div class="o_kpi_top">
<div class="o_kpi_icon_box bg-slate-light text-primary">
<i class="fa fa-shield fs-5"/>
</div>
<span class="o_kpi_trend text-primary">100% OK</span>
</div>
<div class="o_kpi_label">Platform Health</div>
<div class="o_kpi_number">Optimal</div>
<div class="o_kpi_footer">
<span class="o_kpi_sub">Zero reported downtimes</span>
<svg class="o_sparkline" viewBox="0 0 100 30" preserveAspectRatio="none">
<path d="M0 25 Q30 20 60 15 T100 8" fill="none" stroke="#3b82f6" stroke-width="2.5" stroke-linecap="round"/>
</svg>
</div>
</div>
</section>
<!-- Row 2: Filter Toolbar -->
<div class="o_page_toolbar">
<div class="o_filter_pills">
<div class="o_filter_pill active" data-filter="all">All Modules (9)</div>
<div class="o_filter_pill" data-filter="operations">Restaurant Operations</div>
<div class="o_filter_pill" data-filter="delivery">Online &amp; Delivery</div>
<div class="o_filter_pill" data-filter="saas">SaaS Management</div>
</div>
<div class="o_toolbar_search">
<i class="fa fa-search text-muted"/>
<input type="text" class="o_toolbar_search_input" placeholder="Search applications or connectors..."/>
</div>
</div>
<!-- Row 3: Apps Grid -->
<!-- Row 3: Apps Grid (4 Cards Per Row on Desktop, 1 on Mobile) -->
<div class="o_apps_grid mb-4">
<!-- App 1: SaaS Master -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="saas">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#fee2e2; color:#e50000;">
<i class="fa fa-server"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Active</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Dine360 SaaS Engine</h4>
<p class="o_settings_desc mb-3">Multi-tenant automated restaurant provisioning, isolated PostgreSQL database management, and subscription lifecycles.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Core SaaS</span>
<a href="/dashboard/restaurants" class="o_link_red fw-bold small">Manage Tenants →</a>
</div>
</div>
</div>
<!-- App 2: Table Reservations (Tenant Restaurants Only) -->
<t t-if="not is_saas_master">
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="operations">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#dbeafe; color:#2563eb;">
<i class="fa fa-calendar"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Installed</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Table Reservations</h4>
<p class="o_settings_desc mb-3">Advance table booking calendar, guest dining occasions, automated WhatsApp booking confirmation notifications, and peak hours.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Front of House</span>
<a href="/dashboard/reservations" class="o_link_red fw-bold small">Open Bookings →</a>
</div>
</div>
</div>
<!-- App 3: Table & Floor Manager (Tenant Restaurants Only) -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="operations">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#fef3c7; color:#d97706;">
<i class="fa fa-th"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Installed</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Floor &amp; Table Management</h4>
<p class="o_settings_desc mb-3">Visual dining floor plan matrix, seating occupancy tracking, live availability toggle, and POS table synchronization.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Floors</span>
<a href="/dashboard/tables" class="o_link_red fw-bold small">View Floors →</a>
</div>
</div>
</div>
</t>
<!-- App 5: Kitchen Display System (KDS) -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="operations">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#fce7f3; color:#db2777;">
<i class="fa fa-cutlery"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Installed</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Kitchen Display (KDS)</h4>
<p class="o_settings_desc mb-3">Paperless live order ticket monitor for chefs and kitchen stations with order prep timers and bump bar completion status.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Kitchen</span>
<a href="/dashboard/kds" class="o_link_red fw-bold small">Open KDS Screen →</a>
</div>
</div>
</div>
<!-- App 6: Online Orders & Storefront -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="delivery">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#e0e7ff; color:#4f46e5;">
<i class="fa fa-shopping-bag"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Live</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Online Ordering Storefront</h4>
<p class="o_settings_desc mb-3">Direct-to-consumer restaurant website and mobile digital menu ordering with checkout, dine-in QR codes, and home delivery.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Web Store</span>
<a href="/shop" target="_blank" class="o_link_red fw-bold small">View Storefront →</a>
</div>
</div>
</div>
<!-- App 7: Uber Eats & Direct -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="delivery">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#f1f5f9; color:#0f172a;">
<i class="fa fa-motorcycle"/>
</div>
<span class="o_badge_status info"><span class="o_badge_dot"/> Connected</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Uber Direct Integration</h4>
<p class="o_settings_desc mb-3">Automated on-demand courier dispatch, live GPS delivery tracking, and two-way integration with Uber Eats restaurant catalog.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Delivery API</span>
<a href="/dashboard/settings" class="o_link_red fw-bold small">Configure API →</a>
</div>
</div>
</div>
<!-- App 8: Recipe & Ingredient Control -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="operations">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#ffedd5; color:#ea580c;">
<i class="fa fa-book"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Active</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Recipe &amp; Inventory</h4>
<p class="o_settings_desc mb-3">Bill of materials recipe costing, automatic raw ingredient deduction upon order completion, and low stock threshold alerts.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Inventory</span>
<a href="/web#action=stock.stock_picking_type_action" class="o_link_red fw-bold small">Stock Control →</a>
</div>
</div>
</div>
<!-- App 9: QZ Thermal Network Printer -->
<div class="o_app_col" data-search-item="true" data-filter-item="true" data-status="operations">
<div class="o_settings_card h-100 d-flex flex-column justify-content-between">
<div>
<div class="d-flex align-items-start justify-content-between mb-3">
<div class="o_settings_icon" style="background:#f3e8ff; color:#9333ea;">
<i class="fa fa-print"/>
</div>
<span class="o_badge_status success"><span class="o_badge_dot"/> Ready</span>
</div>
<h4 class="o_settings_title fs-5 mb-2">Thermal QZ Network Printer</h4>
<p class="o_settings_desc mb-3">Direct silent hardware printing of kitchen slips (KOT), customer thermal receipts, and bar drink orders via QZ Tray.</p>
</div>
<div class="d-flex align-items-center justify-content-between pt-3 border-top">
<span class="badge bg-light text-muted border">Hardware</span>
<a href="/dashboard/settings" class="o_link_red fw-bold small">Printer Setup →</a>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>