addons-cm/stock_picking_batch_collect
GitHub Copilot 9c81cb986d
[IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report
- The collected checks also apply to transfers outside a batch, opt-in per
  operation type ("Require Collected Lines"), with the batch restrictions of
  the settings. A per-product toggle in the transfer's Operations tab collects
  all its lines.
- Read-only ordered quantity from the sale line on every batch and transfer
  view, since the weighed demand overwrites it. Adds a dependency on
  sale_stock; a migration fills it in the summary of open batches.
- "Delivery Slips" report on the batch: all its delivery slips in one PDF.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 14:34:06 +02:00
..
i18n [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
migrations/18.0.2.1.0 [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
models [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
readme [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
report [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
security [REF] stock_picking_batch_collect: rename and drop the aplicoop dependency 2026-08-27 14:26:47 +02:00
static [REF] stock_picking_batch_collect: rename and drop the aplicoop dependency 2026-08-27 14:26:47 +02:00
tests [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
views [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
__init__.py [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
__manifest__.py [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00
hooks.py [REF] stock_picking_batch_collect: rename and drop the aplicoop dependency 2026-08-27 14:26:47 +02:00
README.rst [IMP] stock_picking_batch_collect: collected checks on transfers, ordered quantity, delivery slips report 2026-10-04 14:34:06 +02:00

===========================
Stock Picking Batch Collect
===========================

Visión general
==============
Este módulo convierte un lote de picking en una hoja de trabajo para el operario
que monta las cestas: amplía las operaciones detalladas, añade un resumen por
producto y una vista a pantalla completa para el almacén.

- ``picking_partner_id`` (Partner del albarán) para que el personal de almacén
  identifique rápido el cliente/proveedor.
- ``product_categ_id`` (Categoría de producto) para ordenar y agrupar. Las
  líneas del lote se ordenan por categoría, producto y partner.
- ``product_default_code`` (Referencia interna) como columna opcional.
- ``is_collected`` (Recogido) como check manual en cada línea para marcar si se
  ha recolectado.
- Nueva pestaña **Product Summary** con totales por producto (demandado, hecho,
  pendiente), categoría y el check de recogido consolidado.
- Botón **Basket Assembly**: una vista de lista a pantalla completa, con
  cantidades grandes y controles táctiles, pensada para tablet en el almacén.
- Restricciones de validación configurables por compañía: el lote no se puede
  validar hasta que las líneas estén marcadas como recogidas.
- Los mismos checks en los albaranes sueltos (fuera de un lote), activables por
  tipo de operación.
- Columna **Cantidad pedida** (``sale_ordered_qty``), de sólo lectura, con lo
  que pidió el cliente en el pedido de venta. Al teclear el peso real la demanda
  del movimiento se ajusta a lo pesado, así que esta columna es la que permite
  comparar lo pedido con lo preparado en la misma pantalla. Está en las
  operaciones detalladas, la vista de operario, la pestaña *Operations* y el
  resumen por producto del lote, y en el albarán.
- Informe **Albaranes** en el lote: todos sus albaranes de entrega en un PDF.

Las columnas se añaden con ``optional="show"`` en la vista de líneas del lote
(salvo ``product_default_code``, oculta por defecto), de modo que el usuario
puede desactivarlas desde el selector de columnas sin recargar la vista.

Si además está instalado ``website_sale_aplicoop``, ese módulo añade a estas
mismas vistas las columnas de grupo de consumo (**Consumer Group** y **Home
Delivery**). Este módulo no depende de él: funciona igual sin la parte de
eCommerce.

Instalación
===========

Actualizar o instalar el módulo:

::

    docker-compose run --rm odoo odoo -d odoo --stop-after-init -u stock_picking_batch_collect

Este módulo sustituye a ``stock_picking_batch_custom``. Al instalarlo sobre una
base de datos que tuviera el módulo antiguo, un ``pre_init_hook`` adopta sus
datos (ver ``hooks.py``): se conservan las líneas recogidas, el resumen por
producto y la configuración por compañía.

Configuración
=============

Restricciones de validación
---------------------------

En **Inventory > Configuration > Settings**, bloque *Operations*, hay dos
ajustes por compañía:

- **Restricciones del resumen de productos**: exige que las líneas de la
  pestaña *Product Summary* estén marcadas como recogidas para validar el lote.
  Desactivado por defecto (el check es sólo informativo).
- **Restricciones de operaciones detalladas**: exige que las líneas de la
  pestaña *Detailed Operations* estén marcadas como recogidas.
  **Activado por defecto**: recién instalado el módulo, un lote no se puede
  validar hasta marcar las líneas.

Cada restricción tiene un alcance:

- *Sólo procesadas*: se comprueban únicamente las líneas con cantidad hecha
  mayor que cero (por defecto).
- *Todas*: se comprueban todas las líneas del lote, procesadas o no.

Albaranes fuera de un lote
--------------------------

Para exigir los checks también en los albaranes sueltos, marcar **Exigir líneas
recogidas** en el tipo de operación (**Inventory > Configuration > Operation
Types**, p. ej. *Delivery Orders*). Viene desactivado: sin él, los albaranes
sueltos de ese tipo se validan como siempre.

Un albarán suelto no tiene resumen por producto, así que las dos restricciones
comprueban sus líneas; si alguna usa el alcance *Todas*, se aplica ese.

Columnas
--------

Las columnas están visibles por defecto. Para ajustarlas:

- Abrir un **Lote de picking**.
- Ir a la pestaña **Detailed Operations**.
- Abrir el **selector de columnas** y activar o desactivar *Partner*,
  *Product Category*, *Product Code* o *Collected* según necesidad.

Uso
===

1. Accede a **Inventory > Operations > Batch Transfers** y abre un lote.
2. Pestaña **Detailed Operations**: usa el selector de columnas para ajustar:

   - **Partner** (``picking_partner_id``) para ver el cliente/proveedor.
   - **Product Category** (``product_categ_id``) para ordenar/agrupación por categoría.
   - **Collected** (``is_collected``) para marcar manualmente líneas recolectadas.

3. Pestaña **Product Summary**: consulta los totales por producto (demandado,
   hecho y pendiente) y marca el check de recogido consolidado si corresponde.

4. Con el lote **en progreso**, el botón **Basket Assembly** abre la vista de
   operario: la misma lista de líneas a pantalla completa, con la cantidad en
   grande y el check *Collected* como interruptor táctil. Está pensada para
   trabajar desde una tablet mientras se montan las cestas.

5. Ordena o agrupa por categoría en cualquiera de las vistas según convenga.

6. La cantidad que teclea el operario (el peso real de la balanza) queda fijada:
   se marca como *Picked* y ni el planificador ni la validación de otros
   albaranes vuelven a modificarla. Marcar **Collected** protege igualmente la
   cantidad de la línea. Ver ``stock_move_manual_quantity``.

7. Al validar el lote, según la configuración de la compañía, se comprueba que
   las líneas estén recogidas y se avisa con la lista de productos pendientes.
   La comprobación se ejecuta después de resolver el backorder, de modo que
   sólo bloquea sobre las líneas que realmente se van a procesar.

8. En un albarán suelto, la pestaña **Operations** tiene un check
   **Collected** por producto, que marca todas sus líneas; las operaciones
   detalladas lo tienen por línea. Si su tipo de operación lo exige, el
   albarán no se valida hasta marcarlos.

9. La columna **Cantidad pedida** muestra lo que pidió el cliente, frente a la
   demanda (ya ajustada al peso) y la cantidad preparada. En el resumen por
   producto del lote es la suma de los pedidos.

10. **Imprimir > Albaranes** en el lote genera un único PDF con el albarán de
    entrega de cada uno de sus traslados (salvo los cancelados), ordenados por
    cliente.

Contribuidores
==============

* Criptomart

Créditos
========

Autor
-----

* Criptomart

Financiador
-----------

* Elika Bilbo