Eliminar Items
Eliminar Items
Section titled “Eliminar Items”Dominio: https://test-api-factura.edw-dev.com
Dominio: https://api-financiero.e-dinky.com
Este endpoint permite eliminar items del sistema de forma permanente.
Eliminar Item
Section titled “Eliminar Item”Endpoint: DELETE /api/v1/items/{code}
Descripción: Elimina un item del sistema de forma permanente.
Headers Requeridos
Section titled “Headers Requeridos”Accept: application/jsonAuthorization: Bearer {token}
Parámetros de Ruta
Section titled “Parámetros de Ruta”Parámetro | Tipo | Descripción |
---|---|---|
code | string | Código del item a eliminar |
Ejemplos de Implementación
Section titled “Ejemplos de Implementación”curl -X DELETE "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \ -H "Accept: application/json" \ -H "Authorization: Bearer your_token_here"
use Illuminate\Support\Facades\Http;
$itemCode = 'PROD-001';$response = Http::withHeaders([ 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $token,])->delete("https://dev-facturacion.e-dinky.test/api/v1/items/{$itemCode}");
$result = $response->json();
if ($response->successful()) { echo "Item eliminado exitosamente";} else { echo "Error: " . $result['message'];}
const axios = require('axios');
const deleteItem = async (token, itemCode) => { try { const response = await axios.delete(`https://dev-facturacion.e-dinky.test/api/v1/items/${itemCode}`, { headers: { 'Accept': 'application/json', 'Authorization': `Bearer ${token}` } }); return response.data; } catch (error) { console.error('Error:', error.response.data); throw error; }};
// UsodeleteItem(token, 'PROD-001') .then(result => { console.log('Item eliminado:', result.message); }) .catch(error => { console.error('Error al eliminar item:', error.response?.data?.message); });
Respuesta Exitosa (200 OK)
Section titled “Respuesta Exitosa (200 OK)”{ "message": "Item eliminado exitosamente", "status": "OK", "payload": { "code": "PROD-001", "description": "Producto eliminado", "deleted_at": "2024-01-15T10:30:00Z" }}
Respuesta de Error (404 Not Found)
Section titled “Respuesta de Error (404 Not Found)”{ "message": "Item no encontrado", "status": "NOT_FOUND", "error": "El item con código 'PROD-999' no existe"}
Respuesta de Error (409 Conflict)
Section titled “Respuesta de Error (409 Conflict)”{ "message": "No se puede eliminar el item", "status": "CONFLICT", "error": "El item está siendo utilizado en documentos existentes", "details": { "documents_count": 5, "last_document": "FAC-001-000123" }}
Respuesta de Error (422 Unprocessable Entity)
Section titled “Respuesta de Error (422 Unprocessable Entity)”{ "message": "No se puede eliminar el item", "status": "UNPROCESSABLE_ENTITY", "error": "El item tiene movimientos de inventario registrados", "details": { "kardex_movements": 15, "current_stock": 25 }}
Códigos de Respuesta
Section titled “Códigos de Respuesta”Código | Descripción |
---|---|
200 | Item eliminado exitosamente |
401 | Token de autorización inválido |
404 | Item no encontrado |
409 | Conflicto - Item en uso |
422 | No se puede eliminar - Tiene movimientos |
500 | Error interno del servidor |
Restricciones de Eliminación
Section titled “Restricciones de Eliminación”Items que NO se pueden eliminar
Section titled “Items que NO se pueden eliminar”-
Items con documentos asociados
- Facturas emitidas
- Presupuestos activos
- Órdenes de trabajo
-
Items con movimientos de kardex
- Ingresos de inventario
- Salidas registradas
- Ajustes de stock
-
Items con inventario actual
- Stock disponible > 0
- Reservas pendientes
Validaciones Previas
Section titled “Validaciones Previas”Antes de eliminar un item, el sistema verifica:
- ✅ El item existe
- ✅ No tiene documentos asociados
- ✅ No tiene movimientos de kardex
- ✅ No tiene stock disponible
- ✅ No está en uso en plantillas
Proceso de Eliminación Segura
Section titled “Proceso de Eliminación Segura”Para eliminar un item de forma segura, sigue estos pasos:
1. Verificar Uso del Item
Section titled “1. Verificar Uso del Item”# Consultar el item para ver su estadocurl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \ -H "Authorization: Bearer $TOKEN"
2. Revisar Documentos Asociados
Section titled “2. Revisar Documentos Asociados”# Buscar documentos que usen este itemcurl -X GET "https://dev-facturacion.e-dinky.test/api/v1/documents" \ -H "Authorization: Bearer $TOKEN" \ -d '{ "filters": [ { "field": "items.code", "condition": "equals", "value": "PROD-001" } ] }'
3. Verificar Kardex
Section titled “3. Verificar Kardex”# Consultar movimientos de kardexcurl -X GET "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001/kardex" \ -H "Authorization: Bearer $TOKEN"
4. Eliminar si es Seguro
Section titled “4. Eliminar si es Seguro”# Solo si no hay restriccionescurl -X DELETE "https://dev-facturacion.e-dinky.test/api/v1/items/PROD-001" \ -H "Authorization: Bearer $TOKEN"
Alternativas a la Eliminación
Section titled “Alternativas a la Eliminación”Desactivar Item
Section titled “Desactivar Item”Si no puedes eliminar un item, considera estas alternativas:
# Cambiar descripción para marcarlo como inactivocurl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "code": "PROD-001", "description": "[INACTIVO] Producto descontinuado", "rate": 0.01, "unit": "Unidad", "type": "PRODUCT", "allow_accounting": 0, "taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}] }'
Agotar Inventario
Section titled “Agotar Inventario”# Reducir stock a 0 si tiene inventariocurl -X PUT "https://dev-facturacion.e-dinky.test/api/v1/items/update" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "code": "PROD-001", "description": "Producto agotado", "rate": 0.01, "unit": "Unidad", "type": "PRODUCT", "allow_accounting": 1, "count_available": 0, "taxes": [{"percentaje": "15", "code": "2", "percentaje_code": "4"}] }'
Ejemplos de Manejo de Errores
Section titled “Ejemplos de Manejo de Errores”PHP - Manejo Completo
Section titled “PHP - Manejo Completo”use Illuminate\Support\Facades\Http;
function deleteItemSafely($token, $itemCode) { try { $response = Http::withHeaders([ 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $token, ])->delete("https://dev-facturacion.e-dinky.test/api/v1/items/{$itemCode}");
if ($response->successful()) { return [ 'success' => true, 'message' => 'Item eliminado exitosamente' ]; }
$error = $response->json();
switch ($response->status()) { case 404: return [ 'success' => false, 'message' => 'El item no existe' ]; case 409: return [ 'success' => false, 'message' => 'El item está en uso y no se puede eliminar', 'details' => $error['details'] ?? null ]; case 422: return [ 'success' => false, 'message' => 'El item tiene movimientos de inventario', 'details' => $error['details'] ?? null ]; default: return [ 'success' => false, 'message' => 'Error inesperado: ' . $error['message'] ]; } } catch (Exception $e) { return [ 'success' => false, 'message' => 'Error de conexión: ' . $e->getMessage() ]; }}
JavaScript - Manejo con Async/Await
Section titled “JavaScript - Manejo con Async/Await”const deleteItemSafely = async (token, itemCode) => { try { const response = await axios.delete(`https://dev-facturacion.e-dinky.test/api/v1/items/${itemCode}`, { headers: { 'Accept': 'application/json', 'Authorization': `Bearer ${token}` } });
return { success: true, message: 'Item eliminado exitosamente', data: response.data }; } catch (error) { const status = error.response?.status; const data = error.response?.data;
switch (status) { case 404: return { success: false, message: 'El item no existe' }; case 409: return { success: false, message: 'El item está en uso y no se puede eliminar', details: data?.details }; case 422: return { success: false, message: 'El item tiene movimientos de inventario', details: data?.details }; default: return { success: false, message: `Error: ${data?.message || error.message}` }; } }};
Notas Importantes
Section titled “Notas Importantes”- ⚠️ Eliminación permanente: Esta operación no se puede deshacer
- 🔒 Validaciones estrictas: El sistema previene eliminaciones que puedan causar inconsistencias
- 📊 Integridad de datos: Se mantiene la integridad referencial en todo momento
- 🔄 Alternativas: Considera desactivar en lugar de eliminar si hay dudas
- 📝 Auditoría: Todas las eliminaciones quedan registradas en los logs del sistema
Recomendaciones
Section titled “Recomendaciones”- Siempre verificar el uso del item antes de intentar eliminarlo
- Usar eliminación por lotes solo en entornos de desarrollo
- Mantener backups antes de eliminaciones masivas
- Documentar las razones de eliminación para auditoría
- Considerar archivado en lugar de eliminación para items históricos