Add integration for an additional Odoo Studio model to an existing Odoo PWA project. Use when user wants to add support for another model, mentions "add new model", "integrate another Odoo model", or similar.
Adds Odoo model integration to PWA projects by creating cache stores, API methods, and UI pages. Triggered when users request to add a new Odoo Studio model or integrate another model.
/plugin marketplace add jamshu/jamshi-marketplace/plugin install odoo-pwa-generator@jamshi-marketplaceThis skill is limited to using the following tools:
Add a new Odoo model integration to an existing Odoo PWA project, creating cache stores, API methods, and UI components.
x_ prefixAsk the user for:
Model name (required)
x_ prefix (e.g., "inventory", "tasks")x_inventory, user provides: inventoryModel display name (required)
Create UI pages (optional)
Before generating, detect the project structure:
Detect framework:
svelte.config.js → SvelteKitvite.config.ts with React → Reactnuxt.config.ts → Vue/NuxtFind existing files:
src/lib/odoo.js (or equivalent)src/lib/stores/Verify Odoo connection:
.env file has ODOO_URL and credentialsGenerate src/lib/stores/{{MODEL_NAME}}Cache.js:
Add model-specific methods to src/lib/odoo.js:
/**
* Fetch {{MODEL_DISPLAY_NAME}} records
*/
async fetch{{MODEL_NAME|capitalize}}s(domain = [], fields = []) {
return await this.searchRecords('x_{{MODEL_NAME}}', domain, fields);
}
/**
* Create {{MODEL_DISPLAY_NAME}}
*/
async create{{MODEL_NAME|capitalize}}(fields) {
return await this.createRecord('x_{{MODEL_NAME}}', fields);
}
/**
* Update {{MODEL_DISPLAY_NAME}}
*/
async update{{MODEL_NAME|capitalize}}(id, values) {
return await this.updateRecord('x_{{MODEL_NAME}}', id, values);
}
/**
* Delete {{MODEL_DISPLAY_NAME}}
*/
async delete{{MODEL_NAME|capitalize}}(id) {
return await this.deleteRecord('x_{{MODEL_NAME}}', id);
}
src/routes/{{MODEL_NAME}}/+page.svelteGenerate form component:
src/routes/{{MODEL_NAME}}/list/+page.svelteGenerate list component:
Update navigation in main layout or existing pages:
<nav>
<!-- Existing links -->
<a href="/{{MODEL_NAME}}">{{MODEL_DISPLAY_NAME}}s</a>
</nav>
Add to .env.example (if needed):
# {{MODEL_DISPLAY_NAME}} Model
ODOO_{{MODEL_NAME|uppercase}}_MODEL=x_{{MODEL_NAME}}
Provide user with:
✅ {{MODEL_DISPLAY_NAME}} integration added successfully!
📋 Next Steps:
1. Verify Odoo Model Setup:
- Model name: x_{{MODEL_NAME}}
- Add custom fields with x_studio_ prefix in Odoo Studio
2. Update Cache Store:
- Edit src/lib/stores/{{MODEL_NAME}}Cache.js
- Add all model fields to the 'fields' array
3. Customize UI:
- Edit src/routes/{{MODEL_NAME}}/+page.svelte for form
- Edit src/routes/{{MODEL_NAME}}/list/+page.svelte for list view
- Add model-specific fields and validation
4. Test Integration:
npm run dev
- Navigate to /{{MODEL_NAME}}
- Test create, read, update, delete operations
- Verify offline functionality
📚 Model-Specific Files Created:
- src/lib/stores/{{MODEL_NAME}}Cache.js - Cache and sync logic
- src/routes/{{MODEL_NAME}}/+page.svelte - Add form
- src/routes/{{MODEL_NAME}}/list/+page.svelte - List view
🔗 Access:
- Add: http://localhost:5173/{{MODEL_NAME}}
- List: http://localhost:5173/{{MODEL_NAME}}/list
$state, $derived, $effectsrc/routes/src/pages/ or as configuredIf generation fails:
User: "Add inventory model to track items"
User: "Integrate task management"
Use when working with Payload CMS projects (payload.config.ts, collections, fields, hooks, access control, Payload API). Use when debugging validation errors, security issues, relationship queries, transactions, or hook behavior.