- docker-compose.coolify.yaml: stack postgres+django sin env_file (variables
via UI de Coolify), sin puertos publicos de BD, sin nginx, expose 8000
- django.coolify.Dockerfile: copia el codigo dentro de la imagen (no toca
django.Dockerfile usado por dev/staging/prod)
Documenta como hacer requests RPC de prueba contra Tryton con
sabatron-tryton-rpc-client:
- .opencode/skills/tryton-rpc-probe/SKILL.md: comando base con docker compose
dev (--no-deps), credenciales desde .env, como revelar estados HTTP
(401/403/429) que la libreria enmascara, convencion de agrupacion de campos
con punto ('template.' -> 'categories.') y sondas de ejemplo
- .opencode/agents/tryton-rpc-probe.md: subagente que obliga a cargar el skill
- AGENTS.md: referencia al skill para todos los agents del proyecto
Issue #51: discriminacion y administracion de categorias de productos.
- product.read ahora solicita template.categories.name; se elimina la
llamada separada model.product.category.read
- ProductTrytonService y CategoryTrytonService construyen el mapa
{id_tryton: nombre} desde 'template.categories.' de los productos leídos
- import_from_external pasa de 3 llamadas RPC a 2
Issue #51: discriminacion y administracion de categorias de productos.
- ProductCategoryAdmin con list_display/filtro por active
- doc/requests.org: GET/PATCH product_categories, import_from_external,
deactivate, activate
Issue #51: discriminacion y administracion de categorias de productos.
- Product.to_list() devuelve categorias como objetos
(id, name, alternative_name, active) en vez de solo nombres
Issue #51: discriminacion y administracion de categorias de productos.
- ProductCategoryView en /api/product_categories (list/retrieve IsNotPublico,
mutaciones admin): filtro ?active, PATCH de description/alternative_name/active
- POST deactivate/activate con body {ids} -> {deactivated|activated, failed}
(ignora ids inexistentes)
- POST import_from_external admin via CategoryTrytonService
- create/destroy deshabilitados (la fuente de categorias es Tryton)
Issue #51: discriminacion y administracion de categorias de productos.
- CategoryTrytonService.import_from_external: lee categorias asociadas a
productos salables, hace upsert por external_id (fallback nombre),
preserva description/alternative_name/active, reporta
checked/created/updated/untouched/failed
- upsert_category compartido y reutilizado por ProductTrytonService
Issue #51: discriminacion y administracion de categorias de productos.
- ProductCategorySerializer (name/external_id read_only)
- ProductCategoryBriefSerializer para el JSON de productos
- ProductSerializer.categories ahora devuelve objetos anidados
Issue #51: discriminacion y administracion de categorias de productos.
- _need_update compara las categorias (external_id) local vs Tryton
- _describe_changes reporta categorias agregadas (+Nombre) y removidas (-Nombre)
- Actualiza test que asumia asignacion de categorias sin marcar update
Issue #51: discriminacion y administracion de categorias de productos.
- ProductCategory.description (TextField blank)
- ProductCategory.alternative_name (CharField 100 nullable)
- ProductCategory.active (Boolean default True)
- Migracion 0056_productcategory_active_and_more
- Tests de modelo (campo don confiao y active por defecto)