Ventas

Endpoints para crear y gestionar ventas a crédito. Al crear una venta, el sistema genera automáticamente el enganche y los pagos quincenales correspondientes.


GET/ventas

Listar ventas

Devuelve la lista de ventas con la información del cliente y el saldo pendiente.

Response

[
  {
    "id": 1,
    "cliente_id": 1,
    "cliente": {
      "id": 1,
      "nombre": "Juan Pérez"
    },
    "tipo": "lentes",
    "estado": "activa",
    "monto_total": 5000.00,
    "enganche": 1000.00,
    "num_quincenas": 8,
    "saldo_pendiente": 3000.00,
    "created_at": "2025-02-15T14:00:00Z"
  }
]

POST/ventas

Crear venta

Crea una nueva venta a crédito y genera automáticamente los pagos asociados.

  • Name
    cliente_id
    Type
    number
    Description

    ID del cliente que realiza la compra.

  • Name
    tipo
    Type
    string
    Description

    Tipo de producto: lentes, armazon, lentes_contacto o accesorio.

  • Name
    monto_total
    Type
    number
    Description

    Monto total de la venta en MXN.

  • Name
    enganche
    Type
    number
    Description

    Monto del enganche (pago inicial).

  • Name
    num_quincenas
    Type
    number
    Description

    Número de pagos quincenales para liquidar el saldo restante.

Request body

{
  "cliente_id": 1,
  "tipo": "lentes",
  "monto_total": 5000.00,
  "enganche": 1000.00,
  "num_quincenas": 8
}

Response (201)

{
  "id": 1,
  "cliente_id": 1,
  "tipo": "lentes",
  "estado": "activa",
  "monto_total": 5000.00,
  "enganche": 1000.00,
  "num_quincenas": 8,
  "saldo_pendiente": 4000.00,
  "pagos": [
    {
      "id": 1,
      "tipo": "enganche",
      "monto": 1000.00,
      "estado": "pendiente",
      "fecha_esperada": "2025-02-15"
    },
    {
      "id": 2,
      "tipo": "quincenal",
      "monto": 500.00,
      "estado": "pendiente",
      "fecha_esperada": "2025-03-01"
    }
  ],
  "created_at": "2025-02-15T14:00:00Z"
}

GET/ventas/:id

Obtener venta

Devuelve los detalles completos de una venta, incluyendo todos sus pagos asociados y la información del cliente.

Response

{
  "id": 1,
  "cliente_id": 1,
  "cliente": {
    "id": 1,
    "nombre": "Juan Pérez",
    "email": "juan@email.com"
  },
  "tipo": "lentes",
  "estado": "activa",
  "monto_total": 5000.00,
  "enganche": 1000.00,
  "num_quincenas": 8,
  "saldo_pendiente": 3000.00,
  "pagos": [
    {
      "id": 1,
      "tipo": "enganche",
      "monto": 1000.00,
      "estado": "pagado",
      "metodo_pago": "efectivo",
      "fecha_esperada": "2025-02-15",
      "fecha_pago": "2025-02-15"
    },
    {
      "id": 2,
      "tipo": "quincenal",
      "monto": 500.00,
      "estado": "pagado",
      "metodo_pago": "transferencia",
      "fecha_esperada": "2025-03-01",
      "fecha_pago": "2025-03-01"
    },
    {
      "id": 3,
      "tipo": "quincenal",
      "monto": 500.00,
      "estado": "pendiente",
      "fecha_esperada": "2025-03-15"
    }
  ],
  "created_at": "2025-02-15T14:00:00Z"
}

PUT/ventas/:id

Actualizar venta

Actualiza los datos de una venta existente. Solo se pueden modificar ventas con estado activa.

  • Name
    tipo
    Type
    string
    Description

    Tipo de producto.

Request body

{
  "tipo": "armazon"
}

Response

{
  "id": 1,
  "cliente_id": 1,
  "tipo": "armazon",
  "estado": "activa",
  "monto_total": 5000.00,
  "enganche": 1000.00,
  "num_quincenas": 8,
  "saldo_pendiente": 3000.00,
  "created_at": "2025-02-15T14:00:00Z"
}

DELETE/ventas/:id

Cancelar venta

Cancela una venta. Cambia el estado de la venta a cancelada y todos los pagos pendientes se cancelan automáticamente.

Request

curl -X DELETE \
  -H "Authorization: Bearer TOKEN" \
  https://api.mundodelentes.com/ventas/1

Response

{
  "id": 1,
  "estado": "cancelada",
  "pagos_cancelados": 6
}

Estados de venta

EstadoDescripción
activaVenta en curso con pagos pendientes
completadaTodos los pagos han sido liquidados
canceladaVenta cancelada manualmente
vencidaTiene pagos vencidos sin liquidar

Tipos de venta

TipoDescripción
lentesLentes graduados
armazonArmazón sin lentes
lentes_contactoLentes de contacto
accesorioAccesorios ópticos

Was this page helpful?