itsulu-blog-publisher/addons/itsulu_blog_publisher/data/ir_cron_data.xml
Nicholas Riegel 0fc4febabf Reorganize codebase into Odoo addon structure per ARCHITECTURE.md
Restructure project files to follow the addon layout:
- Move models to addons/itsulu_blog_publisher/models/
- Move services (LLM providers, routers) to addons/itsulu_blog_publisher/services/
- Move wizards to addons/itsulu_blog_publisher/wizards/
- Move views (XML templates) to addons/itsulu_blog_publisher/views/
- Move data (cron, mail templates) to addons/itsulu_blog_publisher/data/
- Move security (ACL) to addons/itsulu_blog_publisher/security/
- Move tests and factories to addons/itsulu_blog_publisher/tests/
- Move BDD features to addons/itsulu_blog_publisher/features/
- Create __init__.py files for all Python packages

This enables proper Odoo module discovery and import structure.

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

77 lines
3.9 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- ============================================================
Master cron: runs every hour, delegates to active slots.
Individual slots control their own trigger times via the
itsulu.blog.schedule records created below.
============================================================ -->
<record id="ir_cron_blog_publisher_hourly" model="ir.cron">
<field name="name">Blog Publisher — Hourly Slot Check</field>
<field name="model_id" ref="model_itsulu_blog_schedule"/>
<field name="state">code</field>
<field name="code">model._cron_run_all_active_slots()</field>
<field name="interval_number">1</field>
<field name="interval_type">hours</field>
<field name="numbercall">-1</field>
<field name="active">False</field>
<!-- Active=False by default — admin enables in Settings after
configuring API keys and schedule slots. -->
<field name="user_id" ref="base.user_root"/>
</record>
<!-- ============================================================
Default schedule slots — Morning, Afternoon, Evening.
Admin configures blog_id and API keys before activating.
============================================================ -->
<record id="blog_schedule_morning" model="itsulu.blog.schedule">
<field name="name">Morning Post (08:00 UTC)</field>
<field name="slot">morning</field>
<field name="trigger_time">8.0</field>
<field name="active">False</field>
<field name="llm_provider">anthropic</field>
<field name="llm_model">claude-sonnet-4-20250514</field>
<field name="image_provider">none</field>
<field name="auto_publish">True</field>
<field name="tone">professional and informative</field>
<field name="platform_twitter">True</field>
<field name="platform_bluesky">True</field>
<field name="platform_mastodon">True</field>
<field name="platform_linkedin">True</field>
</record>
<record id="blog_schedule_afternoon" model="itsulu.blog.schedule">
<field name="name">Afternoon Post (13:00 UTC)</field>
<field name="slot">afternoon</field>
<field name="trigger_time">13.0</field>
<field name="active">False</field>
<field name="llm_provider">anthropic</field>
<field name="llm_model">claude-sonnet-4-20250514</field>
<field name="image_provider">none</field>
<field name="auto_publish">True</field>
<field name="tone">thought leadership and industry insight</field>
<field name="platform_twitter">True</field>
<field name="platform_bluesky">True</field>
<field name="platform_mastodon">True</field>
<field name="platform_linkedin">True</field>
</record>
<record id="blog_schedule_evening" model="itsulu.blog.schedule">
<field name="name">Evening Post (18:00 UTC)</field>
<field name="slot">evening</field>
<field name="trigger_time">18.0</field>
<field name="active">False</field>
<field name="llm_provider">anthropic</field>
<field name="llm_model">claude-sonnet-4-20250514</field>
<field name="image_provider">none</field>
<field name="auto_publish">True</field>
<field name="tone">accessible and beginner-friendly</field>
<field name="platform_twitter">True</field>
<field name="platform_bluesky">True</field>
<field name="platform_mastodon">True</field>
<field name="platform_linkedin">True</field>
</record>
</data>
</odoo>