Creación de Pedidos No Completados
Documentación completa del comando `restart_stock_v2` que gestiona los pedidos no completados después del horario de recolección de los restaurantes. Su objetivo principal es mantener la integridad del sistema cuando los pedidos no pueden ser entregados por diversas razones.
Nota: El nombre del comando no es completamente descriptivo. Una denominación más precisa sería
create_unfulfilled_order, ya que su función principal es crear registros de pedidos no completados y gestionar las notificaciones correspondientes.
¿Cuándo se ejecuta?
Este comando se ejecuta automáticamente cada 15 minutos durante todo el día a través de un cron job. En cada ejecución evalúa si alguna tienda ha cerrado y si existen pedidos que quedaron en estado "solicitado" pero que ya no pueden ser completados debido a que el tiempo de recolección ha expirado.
Lógica de Evaluación Temporal
- Revisa todas las zonas horarias donde operan los restaurantes
- Compara la hora actual con los horarios de cierre configurados para cada tienda
- Identifica pedidos que superaron el tiempo límite según el horario
collect_beforede cada restaurante
Funcionalidad Principal
1. Identificación de Pedidos No Completados
Proceso de Búsqueda:
- Busca todos los pedidos en estado "solicitado" (
STATUS_REQUESTED) - Aplica filtro temporal:
after_recollection_time()por zona horaria - Considera todas las zonas horarias únicas de las ciudades donde opera la plataforma
Lógica de Filtrado Temporal: Por cada pedido encontrado, se valida:
Condición 1: Verificación de Horario de Cierre
- Obtiene el día de la semana actual en la zona horaria del restaurante
- Busca los horarios configurados (
StoreHours) para ese día específico - Extrae la hora de
local_timezone_collect_before
Condición 2: Comparación Temporal
- Convierte la fecha de creación del pedido a la zona horaria local del restaurante
- Compara
order.created_atvscollect_beforedel mismo día - Regla de Inclusión: Solo se procesan pedidos donde
created_at < collect_before
Ejemplo Práctico:
Pedido creado: 14:30 (zona horaria restaurante)
Horario collect_before: 15:00 (zona horaria restaurante)
Resultado: Se procesa (creado antes del límite)
Pedido creado: 15:30 (zona horaria restaurante)
Horario collect_before: 15:00 (zona horaria restaurante)
Resultado: NO se procesa (creado después del límite)Manejo de Errores:
- Si no se encuentran horarios configurados para un día, se registra error y se omite el pedido
- Errores de conversión de zona horaria se registran pero no detienen el proceso
2. Gestión por Tipo de Restaurante
Restaurantes Regulares
Condiciones de Evaluación:
- Se verifica si el pedido fue completado por la tienda (
order.completed_by_store)
Reglas de Negocio:
Caso 1: Pedido YA completado por la tienda
- Status del pedido:
14(Review) - Status UnfulfilledOrder:
14(Review) - store_answer:
"0"(indica que fue entregado) - Resultado: Se considera pedido completado, no requiere gestión adicional
Caso 2: Pedido NO completado por la tienda
- Status del pedido:
9(Unfulfilled) - Status UnfulfilledOrder:
9(Unfulfilled) - store_answer:
null(sin respuesta de la tienda) - Resultado: Requiere gestión manual, se envían notificaciones
Proceso Adicional:
- Se evalúa si es el primer pedido no completado del usuario (
is_first_unfulfilled()) - Se regeneran códigos de barras para promociones
- Solo se notifica al restaurante si
store_answeresnull
Restaurantes con Integración Deliverect
Condiciones Previas:
- Debe tener
deliverect_channel_idconfigurado - Debe tener
use_deliverect_integration = True - Si no cumple estas condiciones, no se procesa
Reglas de Negocio:
Caso 1: Pedido completado por la tienda
- Status del pedido:
1(Completed) - Status UnfulfilledOrder:
1(Completed) - store_answer:
"0"(entregado) - Estados de finalización:
finished=True,user_finished_view=True,store_finished_view=True
Caso 2: Pedido no completado por la tienda
- Status del pedido:
4(Unfulfilled by user) - Status UnfulfilledOrder:
4(Unfulfilled by user) - store_answer:
null - Estados de finalización:
finished=True,user_finished_view=True,store_finished_view=True
Características Especiales:
- Todos los registros se marcan como finalizados automáticamente
- No requieren gestión manual posterior
- No se envían notificaciones a restaurantes
Cuentas Corporativas (Cencosud/Falabella)
Condiciones de Identificación:
restaurant_name.is_cencosud_account = TrueORrestaurant_name.is_falabella_account = True
Filosofía de Negocio:
La regla toma en cuenta únicamente la respuesta del partner. Si el pedido fue completado por el partner (ya sea por encuesta o por paso en caja), significa que fue entregado y se completa automáticamente sin dar opción al usuario de responder encuesta.
Reglas de Negocio:
Caso 1: Pedido completado por el partner
- Status del pedido:
1(Completed) - Status UnfulfilledOrder:
1(Completed) - store_answer:
"0"(confirmado como entregado) - user_answer:
null(no se solicita respuesta del usuario) - Estados:
finished=True,user_finished_view=True,store_finished_view=True - Resultado: Pedido automáticamente completado
Caso 2: Pedido NO completado por el partner
- Status del pedido:
9(Unfulfilled) - Status UnfulfilledOrder:
9(Unfulfilled) - store_answer:
null(sin confirmación del partner) - user_answer:
null(pendiente de respuesta) - Estados:
finished=False,user_finished_view=False,store_finished_view=False - Resultado: Requiere gestión manual, encuesta activa para ambos (partner y usuario)
Priorización:
- La respuesta del partner prevalece sobre cualquier acción del usuario
- Solo si el partner NO confirma, se permite la gestión bilateral
3. Sistema de Notificaciones
Para Usuarios Finales
- Envía notificación push informando que el pedido no fue completado
- Permite al usuario reportar qué ocurrió con su pedido
Para Restaurantes
- Notifica a los administradores del restaurante sobre pedidos pendientes de resolver
- Mensaje: "⚠️Tienes pedidos pendientes por resolver⚠️"
- Solo se envía si hay pedidos que requieren atención manual
4. Regeneración de Códigos de Barras
Solo para Restaurantes Regulares:
- Cuando se crea un registro
UnfulfilledOrder, se ejecutaregenerate_barcodes_promotion() - Este proceso regenera los códigos de barras de las promociones asociadas al pedido
- Garantiza que las promociones mantengan códigos únicos válidos para el seguimiento
Status de Pedidos
| Status | Código | Descripción | Uso |
|---|---|---|---|
| Completed | 1 | Pedido completado exitosamente | Deliverect y Cencosud confirmados |
| Unfulfilled by User | 4 | No completado por parte del usuario | Deliverect sin confirmación |
| Unfulfilled | 9 | Pedido no completado, requiere gestión | Restaurantes regulares y Cencosud |
| Review | 14 | En revisión, considerado completado | Restaurantes regulares confirmados |
Estados del UnfulfilledOrder
finished: Indica si el caso está cerradouser_finished_view: Si el usuario completó su parte del procesostore_finished_view: Si la tienda completó su parte del procesois_first_order: Identifica si es el primer pedido no completado del usuariostore_answer: Respuesta de la tienda (0 = entregado, null = sin respuesta)user_answer: Respuesta del usuario sobre qué ocurrió
Configuraciones por Zona Horaria
El sistema utiliza el modelo Cities para identificar las diferentes zonas horarias y aplicar la lógica de cierre correspondiente a cada región operativa.
Resolución de Pedidos No Completados en 3 Días
Documentación completa del comando `update_unfulfilled` que finaliza y resuelve los pedidos no completados después de 3 días de su creación.
Flujo de Encuesta (Usuario y Partner)
Documentación completa del sistema de encuesta para pedidos no completados que determina la responsabilidad cuando un pedido no es recogido por el usuario.