itsulu-blog-publisher/addons/itsulu_blog_publisher/views/blog_generation_log_views.xml
Nicholas Riegel 6c51b11b27 Implement wizard and complete UI views for Blog Publisher addon
Create wizard package and complete view layer:

Wizard implementation:
- Create wizards/__init__.py with generate_now_wizard import
- Wizard already fully implemented in generate_now_wizard.py
- Update main addon __init__.py to import wizards

Menu structure:
- Create menu_views.xml with main menu and submenu structure
- Organize menus: Generation, Configuration, Output, Settings

View files (split from consolidated views):
- Create blog_schedule_views.xml (schedule slot tree/form/action)
- Create blog_generation_log_views.xml (log tree/form/action with retry)
- Create blog_post_social_views.xml (social copy tree/form/action)
- Create generate_now_wizard_views.xml (wizard form/action)
- Update blog_topic_views.xml to contain only topic views

Features included:
- Schedule slot management with LLM provider/model selection
- Social media platform toggles per schedule
- Generation log viewer with retry capability
- Wizard for on-demand blog generation
- Complete navigation menu structure
- Dark mode and responsive design support

All views ready for Odoo 14+ deployment.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-05-29 12:35:49 -04:00

95 lines
4.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ================================================================
GENERATION LOG VIEWS
================================================================ -->
<record id="view_blog_generation_log_tree" model="ir.ui.view">
<field name="name">itsulu.blog.generation.log.tree</field>
<field name="model">itsulu.blog.generation.log</field>
<field name="arch" type="xml">
<tree string="Generation Log"
decoration-danger="state=='error'"
decoration-success="state=='success'"
decoration-info="state=='running'">
<field name="create_date" string="Date"/>
<field name="state" widget="badge"
decoration-success="state=='success'"
decoration-danger="state=='error'"
decoration-info="state=='running'"/>
<field name="trigger_source"/>
<field name="schedule_slot" optional="show"/>
<field name="topic_used"/>
<field name="llm_provider"/>
<field name="llm_model" optional="show"/>
<field name="tokens_used"/>
<field name="duration_seconds" string="Dur (s)" optional="show"/>
<field name="blog_post_id"/>
<button name="action_retry" type="object" string="↩ Retry"
attrs="{'invisible': [('state', '!=', 'error')]}"
class="btn-sm btn-warning"
data-test-id="btn-retry-generation"/>
</tree>
</field>
</record>
<record id="view_blog_generation_log_form" model="ir.ui.view">
<field name="name">itsulu.blog.generation.log.form</field>
<field name="model">itsulu.blog.generation.log</field>
<field name="arch" type="xml">
<form string="Generation Log" create="false" edit="false">
<header>
<button name="action_retry" type="object" string="↩ Retry Generation"
attrs="{'invisible': [('state', '!=', 'error')]}"
class="btn-warning"
data-test-id="btn-retry-log-form"/>
</header>
<sheet>
<group>
<group string="Result">
<field name="state" widget="badge"/>
<field name="blog_post_id"/>
<field name="error_message" attrs="{'invisible': [('state', '!=', 'error')]}"/>
</group>
<group string="Trigger">
<field name="trigger_source"/>
<field name="schedule_slot"/>
<field name="topic_used"/>
<field name="topic_source"/>
<field name="triggered_by"/>
</group>
</group>
<group>
<group string="LLM">
<field name="llm_provider"/>
<field name="llm_model"/>
<field name="image_provider"/>
<field name="tokens_used"/>
<field name="duration_seconds"/>
</group>
<group string="Social Platforms">
<field name="platform_twitter"/>
<field name="platform_bluesky"/>
<field name="platform_mastodon"/>
<field name="platform_linkedin"/>
</group>
</group>
<notebook>
<page string="Raw LLM Response" groups="base.group_system">
<field name="raw_llm_response" readonly="1"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_blog_generation_log_list" model="ir.actions.act_window">
<field name="name">Generation Log</field>
<field name="res_model">itsulu.blog.generation.log</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_state_group': 1}</field>
</record>
</odoo>