categorias-productos #51 #52

Open
mono wants to merge 13 commits from feat/51-categorias-productos into main

13 Commits

Author SHA1 Message Date
2dbe55a660 #51 chore(coolify): eliminar variante docker-compose, deploy por imagen del registry 2026-10-17 17:54:16 -05:00
df3549353a #51 chore(registry): fijar DJANGO_ENV=production por defecto en la imagen 2026-10-12 22:28:44 -05:00
786359c102 #51 chore(registry): imagen del backend para publicar en el registry de Gitea
- django.registry.Dockerfile: imagen autocontenida (codigo + entrypoint)
- docker/entrypoint.sh: migrate + collectstatic + gunicorn; con args ejecuta ese comando
- scripts/build-push-image.sh: build y push a gitea.onecluster.org/oneteam/don_confiao_backend (latest + git sha)
2026-10-12 21:57:28 -05:00
13e14e5d2e #51 chore(coolify): docker-compose y Dockerfile dedicados para deploy en Coolify
- 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)
2026-10-12 16:46:18 -05:00
86a67834d1 #51 docs(opencode): skill tryton-rpc-probe y agente de proyecto
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
2026-10-12 16:20:05 -05:00
6e14dd9f36 #51 refactor: traer categorias anidadas en un solo request de productos
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
2026-10-10 17:52:21 -05:00
128ba215dd #51 feat: registrar categorias en admin y documentar endpoints
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
2026-10-10 16:47:12 -05:00
436f5300fa #51 feat: categorias anidadas en el listado legacy de productos
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
2026-10-10 16:45:32 -05:00
3b53703c4d #51 feat: API de categorias de productos
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)
2026-10-10 16:43:37 -05:00
74cd9738b4 #51 feat: servicio de importacion externa de categorias de productos
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
2026-10-10 16:38:47 -05:00
73fff016a3 #51 feat: serializadores de categorias y categorias anidadas en productos
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
2026-10-10 16:35:43 -05:00
c0dcb7901a #51 fix: detectar cambios de categorias al sincronizar productos
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
2026-10-10 16:33:18 -05:00
570fec0532 #51 feat: agregar descripcion, nombre alternativo y activo a categorias de productos
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)
2026-10-10 16:27:49 -05:00