Ir al contenido principal

control/embarque/paquete -[storeQuantities]

Path: /var/www/html/qaservicesapp/app/Http/Controllers/ShalomControl/EmbarqueController.php

🧾 Descripción

Este servicio registra el embarque de paquetes para una Orden de Servicio (OS).
Valida toda la información crítica del embarque, verifica restricciones de rutas, valida si la OS está apta para embarque (QR / clave / no anulada), confirma cantidades, registra procesos históricos, actualiza estados de embarque y permite manejar escenarios:

  • Embarque normal

  • Embarque masivo

  • Embarque aéreo

  • Embarque desde cooler

Es uno de los servicios centrales del módulo logístico.


🚀 Endpoint


POST /store-quantities

📥 Request Body

{ "ose_id": 12345, "cantidad": 12, "cantidades": "1,2,3,4", "usuario": "jlopez", "terminal": 7, "tipo_cierre": "APP", "cap_id": 881, "cierre_aereo": null, "cooler": null, "placa": null, "traspaso": 0 }

Campos requeridos

Campo Tipo Obligatorio Descripción
ose_id number ID de la Orden de Servicio a embarcar.
cantidad number Cantidad total declarada a embarcar.
cantidades string (CSV) Paquetes escaneados para este embarque.
usuario string Usuario que está realizando el proceso.
terminal number Terminal desde donde se embarca.
tipo_cierre "APP" | "PDA" Tipo de registro del embarque.
cap_id number Carguero (ruta programada) asignado.

Campos opcionales

Campo Tipo Descripción
cierre_aereo number ID del cierre a registrar si es embarque aéreo.
cooler string Código del cooler si se embarca desde uno.
placa string Para embarque masivo (opcional).
traspaso number (0/1) Indica si permite traspaso entre terminales.

🔐 Seguridad

Servicio protegido mediante autenticación de API interna del sistema.
Requiere usuario autenticado y terminal válida.


🧠 Flujo del Servicio (resumen real)

A continuación, el flujo real y completo basado en tu código:


🔹 1. Validación de parámetros obligatorios

  • ose_id

  • cantidades

  • cantidad

  • usuario

  • terminal

  • cap_id

  • tipo_cierre (solo APP o PDA)


🔹 2. Obtiene la Orden de Servicio

Consulta: emp_ordenservicio
Valida:

  • Existe la OS

  • No está anulada

  • Tiene QR o clave (según reglas del contacto)

  • Terminal de destino coincide para permitir embarque


🔹 3. Valida retención de embarque aéreo

Consulta: emp_retencion_embarque_aereo
Si existe → no permite embarque.


🔹 4. Valida terminales, rutas y restricciones del carguero

Consulta: emp_cargprogramado

Verifica:

  • Que el origen del carguero incluya la terminal actual (a menos que sea traspaso).

  • Restricciones de destino.

  • Que si es destino aéreo, la ruta sea aérea.

Si alguna restricción aplica → error.


🔹 5. Obtiene cantidades totales de la OS

Consulta: emp_os_detalle
Calcula unidades totales.


🔹 6. Verifica paquetes previamente desembarcados

Consulta: emp_procesos_historial_app
Si encuentra que todos los paquetes ya están en destino → bloquea embarque.


🔹 7. Verifica embarques previos

Consulta: emp_embarque_historial
Evalúa:

  • embarque actual

  • cantidades ya registradas

  • estado de guía

  • si ya está 100% embarcada

Si ya embarcó todos los paquetes → error.


🔹 8. Registra o actualiza el embarque

Dos escenarios:

a) Primer registro

Inserta en:
emp_embarque_historial

b) Actualización

Actualiza registro existente.


🔹 9. Actualiza el estado de la Orden de Servicio

Actualiza en emp_ordenservicio:

  • estado de paquete

  • último carguero

  • estado de embarque general

  • fecha de embarque

  • marcas de validación


🔹 10. Registra proceso histórico

En:
emp_procesos_historial_app

  • Si no existe → inserta

  • Si existe → actualiza cantidades


🔹 11. Procesos adicionales

  • Si es embarque aéreo → actualiza emp_embarque_aereo

  • Si embarca desde cooler → marca estado del registro en emp_cooler_guias


🔹 12. Respuesta final

Devuelve éxito y número de guía.


📤 Response 200 – Ejemplo

{ "success": true, "message": "Paquetes de la OS: 458822 embarcados con éxito." }


Posibles Errores

1. Campos faltantes

{ "success": false, "message": "Falta cantidad." }

2. OS no encontrada

{ "success": false, "message": "Guia no encontrada." }

3. OS anulada

{ "success": false, "message": "La guía se encuentra anulada." }

4. OS sin QR o clave válida

{ "success": false, "message": "La Orden de Servicio no tiene código QR." }

5. Terminal no permitida

{ "success": false, "message": "La Orden de Servicio ya se encuentra en su destino." }

6. Restricción de embarque aéreo

{ "success": false, "message": "La guia tiene una retención de embarque aereo, no se puede embarcar" }

7. Restricción de ruta

{ "success": false, "message": "En la ruta X no puede embarcar para el destino Y." }

8. Paquetes ya embarcados

{ "success": false, "message": "Ya fueron embarcados todos los paquetes de la guia." }

9. Error al actualizar embarque aéreo o cooler

{ "success": false, "message": "Ocurrió un error al embarcar la OS: XXXX" }


📚 Schemas (estructuras usadas)

emp_ordenservicio

{ "ose_id": "number", "ose_nroguiacliente": "string", "ose_estadoPago": "string", "ose_code_qr": "string", "ose_termorigenatencion": "number", "ose_termdestinoentrega": "number", "ose_fhpreferenciapartida": "datetime" }

emp_embarque_historial

{ "emb_id": "number", "emb_ose_id": "number", "emb_cant_paquetes_embarcados": "string", "emb_cant_paquetes_total": "number", "emb_terminal": "number", "emb_carg_id": "number" }

emp_procesos_historial_app

{ "id": "number", "idose": "number", "idcarguero": "number", "proceso": "string", "nombre_metodo": "string", "cant_paquetes": "string" }

emp_cooler_guias

{ "codigo_barra": "string", "ose_id": "number", "estado_embarque": "0|1" }

emp_embarque_aereo

{ "ose_id": "number", "estado": "number", "cierre_id": "number|null" }


🗃 Lógica en pseudo-código

validar parámetros requeridos orden = obtener OS si no existe o está anulada -> error validar QR o clave validar terminal de destino validar retenciones aéreas validar rutas, orígenes, restricciones detalle = obtener total de paquetes de OS procesos_previos = obtener historial si todos los paquetes ya están en destino -> error embarques_previos = obtener embarques si ya embarcados todos -> error si no existe embarque actual: insertar registro de embarque sino: actualizar registro existente actualizar estado de OS registrar proceso histórico si cierre_aereo -> actualizar emp_embarque_aereo si cooler -> actualizar emp_cooler_guias return éxito