# control/grupo/carguero/agregar - [agregarCarguero]

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

## 🧾 **Descripción**

Agrega un **carguero (cap\_id)** a un **grupo de cargueros de desembarque (grp\_id)**.  
El servicio valida que:

- Exista el grupo.
- El grupo tenga su lista de cargueros almacenados en formato JSON.
- El carguero no esté ya incluido en el grupo.
- Luego actualiza la tabla agregando el carguero al listado.

Este servicio modifica directamente la tabla:

**emp\_grupo\_cargueros\_desembarque**

---

# 🚀 **Endpoint**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-%2Fagregar-cargue"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`POST /agregar-carguero`</div></div>---

# 📥 **Request Body**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22grp_id%22%3A-%22number%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"grp_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cap_id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Parámetros requeridos

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1045" data-start="833"><thead data-end="877" data-start="833"><tr data-end="877" data-start="833"><th data-col-size="sm" data-end="841" data-start="833">Campo</th><th data-col-size="sm" data-end="848" data-start="841">Tipo</th><th data-col-size="sm" data-end="862" data-start="848">Obligatorio</th><th data-col-size="md" data-end="877" data-start="862">Descripción</th></tr></thead><tbody data-end="1045" data-start="923"><tr data-end="991" data-start="923"><td data-col-size="sm" data-end="932" data-start="923">grp\_id</td><td data-col-size="sm" data-end="941" data-start="932">number</td><td data-col-size="sm" data-end="946" data-start="941">Sí</td><td data-col-size="md" data-end="991" data-start="946">ID del grupo de cargueros de desembarque.</td></tr><tr data-end="1045" data-start="992"><td data-col-size="sm" data-end="1001" data-start="992">cap\_id</td><td data-col-size="sm" data-end="1010" data-start="1001">number</td><td data-col-size="sm" data-end="1015" data-start="1010">Sí</td><td data-col-size="md" data-end="1045" data-start="1015">ID del carguero a agregar.</td></tr></tbody></table>

</div></div>---

# 🔐 **Seguridad**

Protegido por autenticación del sistema (middleware).  
El servicio no valida permisos dentro de la función.

---

# 🧠 **Flujo del Servicio (resumen real)**

1. **Validación inicial de parámetros**
    
    
    - Si falta `grp_id` → retorna error.
    - Si falta `cap_id` → retorna error.
2. **Obtiene información del grupo**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">SELECT</span> grupo<span class="hljs-keyword">FROM</span> emp_grupo_cargueros_desembarque<span class="hljs-keyword">WHERE</span> id <span class="hljs-operator">=</span> grp_id`</div></div>
    - Si no existe → error “Grupo no encontrado”.
3. **Decodifica el campo `grupo`**
    
    
    - Si el campo `grupo` tiene JSON → se convierte en array.
    - Si está vacío → se crea array vacío.
4. **Verifica si el carguero ya está en el grupo**
    
    
    - Si `cap_id` ya existe → error “El carguero ya se encuentra en el grupo”.
5. **Agrega el nuevo carguero al grupo**
    
    
    - Inserta `cap_id` dentro del array.
    - Convierte el array nuevamente a JSON.
6. **Actualiza la BD**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-keyword">UPDATE</span> emp_grupo_cargueros_desembarque<span class="hljs-keyword">SET</span> grupo <span class="hljs-operator">=</span> json_encode(arreglo_actualizado)<span class="hljs-keyword">WHERE</span> id <span class="hljs-operator">=</span> grp_id`  
      
    </div></div>
7. **Retorna éxito**
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-string">"Carguero agregado al grupo"</span>`</div></div>

---

# 📤 **Response 200 – Ejemplo**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-true%2C-%22"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Carguero agregado al grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# ❗ **Posibles Errores**

### 1. Falta `grp_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C-"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Falta cap_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>*(El mensaje es incorrecto en el código, pero lo dejamos tal cual está implementado.)*

---

### 2. Falta `cap_id`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Falta cap_id"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### 3. Grupo no existe

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--2"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Grupo no encontrado"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### 4. Carguero repetido

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22success%22%3A-false%2C--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"El carguero ya se encuentra en el grupo"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 **Schemas (estructuras usadas)**

### Tabla: `emp_grupo_cargueros_desembarque`

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22id%22%3A-%22number%22%2C-%22g"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"id"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"number"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"grupo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string(JSON array of cap_id)"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>Ejemplo del campo `grupo`: `<span class="hljs-punctuation">[</span><span class="hljs-string">"123"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"245"</span><span class="hljs-punctuation">,</span> <span class="hljs-string">"300"</span><span class="hljs-punctuation">]</span>`

---

# 🗃 **Lógica en pseudo-código**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-%21grp_id--%3E-error%28"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`if !grp_id -> error("Falta cap_id")if !cap_id -> error("Falta cap_id")grupo = SELECT grupo FROM tabla WHERE id = grp_idif !grupo -> error("Grupo no encontrado")grupos = decode(grupo.grupo) OR []if cap_id in grupos:    error("El carguero ya se encuentra en el grupo")grupos.append(cap_id)UPDATE tabla SET grupo = encode(grupos) WHERE id = grp_idsuccess("Carguero agregado al grupo")`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>