Skip to main content
AutoLog’s Asset Tracking system provides comprehensive inventory management across multiple locations, including warehouses (bodegas), client sites, and employee assignments.

Overview

The asset tracking module enables you to:
  • Manage warehouse inventory (bodegas)
  • Track asset movements between locations
  • Monitor asset status and condition
  • Generate QR codes for asset identification
  • View complete asset history
  • Import/export asset data in bulk

Warehouse Management (Bodegas)

Creating a Warehouse

1

Open Warehouse List

Navigate to Inventario > Bodegas from the main menu.
2

Add New Warehouse

Click + Nueva BodegaRequired information:
  • Nombre: Warehouse name
  • Ciudad: City/location
  • Descripción: Optional description
3

Save Warehouse

Click Guardar - the warehouse is created and ready to receive assets
API Service:
// Source: BodegasServices.jsx
export async function createBodega(data) {
  const res = await fetchConToken(endpoints.Bodegas, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(data),
  });
  const json = await res.json();
  if (!res.ok) throw new Error(json.message || "Error al crear bodega");
  return json;
}

Viewing Warehouse Details

Click on any warehouse name to view:

Inventory Summary

  • Total assets stored
  • Assets by type
  • Assets by status
  • Recent movements

Asset List

Detailed table showing:
  • Asset code and name
  • Type and model
  • Serial number
  • Current status
  • Quick actions

Warehouse Filtering

// Source: BodegasList.jsx:145-153
const filtered = useMemo(() => {
  const s = normalize(search);
  return rows.filter(
    (r) =>
      normalize(r.nombre).includes(s) ||
      normalize(r.ciudad).includes(s) ||
      normalize(r.descripcion).includes(s)
  );
}, [rows, search]);

Asset Management

Creating an Asset

1

Navigate to Assets

Go to Inventario > Activos
2

Fill Asset Form

Required fields:
  • Código: Unique asset identifier
  • Nombre: Asset name/description
  • Tipo: Asset type (Computer, Monitor, Phone, etc.)
Optional fields:
  • Modelo: Model information
  • Serial Number: Manufacturer serial number
  • Estatus: Initial status (usually “Disponible”)
  • Initial Location: Warehouse, client, or employee
3

Save Asset

Click Guardar - asset is created and added to inventory

Asset Properties

Each asset tracks extensive information:
PropertyDescriptionExample
codigoUnique identifier”LAP-001”
nombreDescriptive name”Dell Latitude 5520”
tipoAsset category”Laptop”
modeloModel/variant”Latitude 5520”
serial_numberManufacturer serial”ABC123XYZ”
estatusCurrent status”Disponible”, “En Uso”, “Dañado”
tipo_destinoLocation type”Bodega”, “Cliente”, “Empleado”
bodega_nombreWarehouse name (if in bodega)“Bodega Central”
cliente_nombreClient name (if at client)“Acme Corp”
site_nombreClient site (if applicable)“Main Office”
empleado_nombreEmployee name (if assigned)“Juan Pérez”

Asset Status Colors

// Source: Used throughout asset views
export const ESTATUS_COLOR = {
  "Disponible": "success",
  "En Uso": "primary",
  "En Mantenimiento": "warning",
  "Dañado": "danger",
  "Inactivo": "neutral"
};
Status colors provide quick visual identification of asset condition across all views.

Moving Assets

Assets can be moved between warehouses, clients, and employees.

Movement Types

Transfer assets between storage locations:
  1. Select asset from source warehouse
  2. Click Mover icon
  3. Select destination warehouse
  4. Add movement notes (optional)
  5. Confirm transfer
Use cases:
  • Inventory redistribution
  • Stock balancing
  • Warehouse consolidation
Deploy assets to client sites:
  1. Open asset details
  2. Click Mover action
  3. Select Cliente as destination type
  4. Choose client company
  5. Select specific site (if applicable)
  6. Confirm deployment
Tracked information:
  • Deployment date
  • Client name and site
  • Expected return date (optional)
  • Purpose/project notes
Assign assets to employees:
  1. Select asset
  2. Click Mover
  3. Choose Empleado as destination
  4. Search and select employee
  5. Add assignment reason
  6. Confirm assignment
Auto-tracking:
  • Assignment date
  • Employee department
  • Manager approval (if configured)
  • Responsibility acknowledgment

Movement History

Every asset maintains a complete movement history:
// Source: ActivosServices.jsx:66-71
export async function getHistorialUbicaciones(id) {
  const res = await fetchConToken(
    `${endpoints.getActivoById}${id}/historial`
  );
  const json = await res.json();
  if (!res.ok) throw new Error(json.message || "Error al obtener historial");
  return json;
}
1

Open History

Click the History icon on any asset
2

View Timeline

See chronological list of movements:
  • Date and time
  • From location
  • To location
  • User who performed movement
  • Notes/reason
3

Export History

Download complete history as PDF or Excel for auditing

Global Asset List

The global asset view provides system-wide inventory visibility.

Advanced Search and Filtering

Search Bar Features:
// Source: ActivosList.jsx:186-208
const filtered = useMemo(() => {
  const s = normalize(search);
  return rows.filter((r) => {
    const matchSearch =
      normalize(r.codigo).includes(s) ||
      normalize(r.nombre).includes(s) ||
      normalize(r.modelo).includes(s) ||
      normalize(r.serial_number).includes(s);

    const matchStatus =
      statusFilter.length === 0 || statusFilter.includes(r.estatus);
    const matchType = 
      typeFilter.length === 0 || typeFilter.includes(r.tipo);

    const matchUbicacion =
      !ubicacionFilter ||
      (ubicacionFilter === "Cliente" && r.tipo_destino === "Cliente") ||
      (ubicacionFilter === "Bodega" && r.tipo_destino === "Bodega") ||
      (ubicacionFilter === "Empleado" && r.tipo_destino === "Empleado") ||
      (ubicacionFilter === "SinUbicacion" && !r.tipo_destino);

    return matchSearch && matchStatus && matchType && matchUbicacion;
  });
}, [rows, search, statusFilter, typeFilter, ubicacionFilter]);

Filter Options

Filter by asset condition:
  • ✅ Disponible (Available)
  • 🔵 En Uso (In Use)
  • ⚠️ En Mantenimiento (Maintenance)
  • ❌ Dañado (Damaged)
  • ⚪ Inactivo (Inactive)
Multi-select: Choose multiple statuses

Pagination and Sorting

Pagination Controls:
  • Rows per page: 10, 25, 50, 100
  • Page navigation buttons
  • Current range display: “Showing 1-25 of 250”
// Source: ActivosList.jsx:246-250
const totalPages = Math.max(1, Math.ceil(sortedRows.length / perPage));
const pageRows = useMemo(() => {
  const start = (page - 1) * perPage;
  return sortedRows.slice(start, start + perPage);
}, [sortedRows, page, perPage]);
Sortable Columns:
  • Code (código)
  • Name (nombre)
  • Type (tipo)
  • Model (modelo)
  • Status (estatus)
  • Destination (tipo_destino)

QR Code Generation

Generate QR codes for easy asset identification and tracking.

Creating Asset QR Codes

1

Select Asset

Find the asset in any list view
2

Generate QR

Click the QR icon - system generates:
  • Public link to asset details
  • QR code with company logo
  • Printable format
3

Download and Print

Options:
  • Descargar PNG: High-resolution image
  • Test Link: Verify QR functionality
  • Print: Direct print option
QR Code Service:
// Source: PublicLinksService.jsx
export async function getPublicLinkForActivo(idActivo) {
  const res = await fetchConToken(
    `${endpoints.getActivos}${idActivo}/public/link`,
    {
      method: "GET",
      headers: { "Content-Type": "application/json" },
    }
  );
  
  if (!res.ok) throw new Error("Error generating public link");
  
  // Returns: { url, token }
  return await res.json();
}

QR Code Best Practices

Physical Attachment

  • Print on durable material
  • Attach to asset surface
  • Protect with clear laminate
  • Include asset code as text

Public Access

QR codes link to public pages showing:
  • Asset identification
  • Basic specifications
  • Current location (if permitted)
  • Contact information

Import and Export

Bulk Import

Import assets from Excel or CSV:
Before importing, ensure your spreadsheet follows the template format exactly. Missing required fields will cause import errors.
Required columns:
  • codigo (unique)
  • nombre
  • tipo
Optional columns:
  • modelo
  • serial_number
  • estatus
  • id_bodega (warehouse ID)

Export Options

// Source: ActivosList.jsx:450-470
const EXPORT_COLS = [
  { label: t("inventory.list.columns.code"), key: "codigo" },
  { label: t("inventory.list.columns.name"), key: "nombre" },
  { label: t("inventory.list.columns.type"), key: "tipo" },
  { 
    label: t("inventory.list.columns.model"),
    key: "modelo",
    get: (r) => r.modelo || ""
  },
  {
    label: t("inventory.list.columns.serial"),
    key: "serial_number",
    get: (r) => r.serial_number || ""
  },
  { label: t("inventory.list.columns.status"), key: "estatus" },
  {
    label: t("inventory.list.columns.destination"),
    key: "tipo_destino",
    get: getDestinoText,
  },
];
Export formats:
  • Excel (.xlsx) - Full formatting
  • CSV - Universal compatibility
  • PDF - Print-ready reports

Keyboard Shortcuts

Power users can navigate faster with keyboard shortcuts:
ShortcutAction
/Focus search bar
Ctrl/Cmd + Shift + FFocus search
Ctrl/Cmd + Shift + NNew asset
Ctrl/Cmd + Shift + EExport data
Ctrl/Cmd + Shift + IImport data
Ctrl/Cmd + Shift + LOpen filters

Permissions

Asset tracking actions require specific permissions:
ActionPermission Required
View assetsver_activos
Create assetcrear_activos
Edit asseteditar_activos
Move assetmover_activos
View historyver_historial_activos
Generate QRcrear_QR
Manage warehousesgestionar_bodegas
Permission Example:
// Source: ActivosList.jsx:97-107
const isAdmin = userData?.rol?.toLowerCase() === "admin";
const can = useCallback(
  (p) => isAdmin || hasPermiso(p),
  [isAdmin, hasPermiso]
);

const canView = can("ver_activos");
const canCreate = can("crear_activos");
const canEdit = can("editar_activos");
const canMove = can("mover_activos");
const canViewHistory = can("ver_historial_activos");
const canQR = can("crear_QR");

Build docs developers (and LLMs) love