# 0.4 - La opcion solo aparece cuando realmente hay sucursales

## Definicion corregida

**Archivos funcionales reales**:
- `resources/js/views/tenant/configurations/form.vue`
- `resources/views/tenant/layouts/partials/sidebar.blade.php`
- `resources/js/views/tenant/items/branch_pricing.vue`
- `app/Http/Controllers/Tenant/ItemController.php`

**Nota**:
- `resources/js/views/tenant/items/form.vue` ya no es el punto de entrada funcional para precios por sucursal.
- La gestion viva esta en la pantalla dedicada `/items/branch-pricing`.

**Para que**:
- ocultar el switch de configuracion, el acceso del menu y la pantalla dedicada cuando el tenant solo tiene el almacen principal.

**Por que**:
- si no hay sucursales, la funcionalidad de precios por sucursal sobra y confunde.

## Criterio de aceptacion

1. Tenant con solo Principal:
- no debe verse `Activar seccion Precios por sucursal` en `/advanced`, pestana `Visual`
- no debe verse la opcion `Precios por sucursal` en `Productos / Servicios`
- si se abre directamente `/items/branch-pricing`, debe redirigir al listado de productos

2. Tenant con al menos una sucursal:
- si debe verse `Activar seccion Precios por sucursal` en `/advanced`, pestana `Visual`
- si debe verse la opcion `Precios por sucursal` en `Productos / Servicios`
- si debe cargar la pantalla dedicada `/items/branch-pricing`

## Verificacion manual

### Caso 1: tenant con solo Principal
1. Ingresar al tenant.
2. Ir a `/advanced`.
3. Abrir la pestana `Visual`.
4. Confirmar que no aparece `Activar seccion Precios por sucursal`.
5. Ir a `Productos / Servicios`.
6. Confirmar que no aparece la opcion `Precios por sucursal`.
7. Abrir manualmente `/items/branch-pricing`.
8. Confirmar que redirige al listado de productos.

### Caso 2: tenant con al menos una sucursal
1. Ingresar al tenant.
2. Ir a `/advanced`.
3. Abrir la pestana `Visual`.
4. Confirmar que aparece `Activar seccion Precios por sucursal`.
5. Ir a `Productos / Servicios`.
6. Confirmar que aparece la opcion `Precios por sucursal`.
7. Abrir `/items/branch-pricing`.
8. Confirmar que carga la pantalla dedicada de administracion de precios por sucursal.

# 0.5 - Producto: Presentaciones = plantilla, Precios locales = propagar/sincronizar

## Definicion corregida

**Archivos funcionales reales**:
- `resources/js/views/tenant/items/form.vue`
- `resources/js/views/tenant/items/branch_pricing.vue`
- `app/Http/Controllers/Tenant/ItemController.php`
- `routes/web.php`
- `app/Http/Resources/Tenant/ItemResource.php`

**Nota**:
- `resources/js/views/tenant/items/form.vue` mantiene `Presentaciones` como editor de la plantilla maestra.
- La gestion de precios locales no vive en una pestana del formulario del producto; vive en la pantalla dedicada `/items/branch-pricing`.

**Para que**:
- separar claramente dos responsabilidades:
- `Presentaciones`: edita la plantilla maestra del producto.
- `Precios locales por sucursal`: aplica la plantilla a sucursales seleccionadas y sincroniza presentaciones pendientes.

**Por que**:
- el modelo nuevo no es "heredar precio global"; es "Principal define plantilla" y cada sucursal guarda precio local real.
- las acciones visibles deben hablar de plantilla y sincronizacion, no de herencia implicita.

## Criterio de aceptacion

1. Formulario de producto:
- la pestana `Presentaciones` sigue disponible para editar la plantilla maestra.
- no debe existir una pestana muerta o duplicada de `Precios por sucursal` dentro del formulario.

2. Pantalla dedicada:
- `/items/branch-pricing` debe mostrar `Precios locales por sucursal`.
- debe permitir seleccionar producto y sucursal.
- debe mostrar la accion `Copiar precios de Principal a sucursales`.
- debe mostrar la accion `Agregar presentaciones nuevas a sucursales`.
- al abrir cualquiera de esas acciones, la sucursal actual debe quedar preseleccionada para evitar duplicar opciones de "esta sucursal" y "varias sucursales".

3. Backend:
- `POST /items/{item}/apply-master-prices` aplica la plantilla maestra a sucursales seleccionadas.
- `POST /items/{item}/sync-missing-master-prices` crea los precios locales faltantes y reemplaza filas pendientes `0/0/0` con la plantilla.
- `POST /items/{item}/branch-pricing` guarda precios locales reales por sucursal.

## Verificacion manual

1. Abrir `/items` y editar un producto con presentaciones.
2. Confirmar que `Presentaciones` edita la plantilla maestra y que no aparece una pestana de precios por sucursal dentro del formulario.
3. Abrir `Productos / Servicios > Precios por sucursal`.
4. Confirmar que carga la pantalla `Precios locales por sucursal`.
5. Seleccionar un producto disponible en una sucursal.
6. Usar `Acciones > Copiar precios de Principal a sucursales...`.
7. Confirmar que el dialogo abre con la sucursal actual preseleccionada.
8. Volver al producto, agregar una presentacion nueva en `Presentaciones` y guardar.
9. Regresar a `/items/branch-pricing`.
10. Usar `Acciones > Agregar presentaciones nuevas a sucursales...`.
11. Confirmar que el dialogo abre con la sucursal actual preseleccionada.
12. Confirmar que la nueva presentacion queda con precio local en la sucursal seleccionada.

# 0.6 - Guardado de precios locales

## Definicion corregida

**Archivos funcionales reales**:
- `app/Http/Controllers/Tenant/ItemController.php`
- `app/Services/ItemWarehousePricingService.php`
- `app/Http/Resources/Tenant/ItemResource.php`
- `resources/js/views/tenant/items/branch_pricing.vue`

**Nota**:
- El backend de producto puede persistir `warehouse_prices` si llegan en el payload de `item_unit_types`.
- La UI visible para editar precios locales ya no esta en el formulario del producto; esta en `/items/branch-pricing`.

**Para que**:
- convertir los cambios de precio local en filas reales por `presentacion x sucursal`.
- marcar la sucursal como inicializada cuando realmente se guardan precios locales.

**Por que**:
- mostrar precios en frontend no basta; el precio local debe quedar persistido en `item_unit_type_warehouse_price`.
- Principal debe conservar su plantilla y las sucursales deben guardar precios propios sin afectar otras sucursales.

## Criterio de aceptacion

- Al guardar precios desde `/items/branch-pricing`, debe persistir `warehouse_prices`.
- Al reabrir el producto en `/items/branch-pricing`, debe verse el precio guardado.
- El precio de Principal no debe cambiar.
- Otras sucursales no deben cambiar.
- La sucursal guardada debe quedar marcada como inicializada.

## Verificacion manual

1. Abrir `/items/branch-pricing`.
2. Seleccionar un producto que exista en una sucursal.
3. Cambiar un precio local de esa sucursal.
4. Guardar con `Guardar precios`.
5. Recargar o volver a seleccionar el producto.
6. Confirmar que el precio local persiste.
7. Ir al formulario del producto y revisar `Presentaciones`.
8. Confirmar que el precio de Principal no cambio.
9. Si existe otra sucursal, seleccionarla y confirmar que su precio no cambio.
