Skip to main content

Overview

The Suppliers API manages supplier (proveedor) records for purchase order management.

Proveedor Model (Supplier)

integer
Unique supplier identifier (auto-generated)
integer
Foreign key to User (admin who created the supplier)
string
Supplier contact name (max 100 characters, required)
string
Company name (max 150 characters, required)
string
Phone number (max 20 characters, required)
email
Email address (required)
string
Physical address (max 200 characters, required)
datetime
Registration timestamp (auto-generated)

List Suppliers

Requires authentication. Returns suppliers owned by the authenticated user (admin) or their creator (vendedor).

Response

Returns rendered HTML template with list of suppliers sorted by name.

Create Supplier

Requires authentication and admin role.

Request Parameters

string
required
Supplier contact name (max 100 characters)
string
required
Company name (max 150 characters)
string
required
Phone number (max 20 characters)
email
required
Valid email address
string
required
Physical address (max 200 characters)

Response

Success (HTTP 302):
  • Redirects to /proveedores/
  • Flash message: “Proveedor agregado correctamente.”
Validation Error (HTTP 200):
  • Re-renders form with error messages
  • Flash message: “Revisa los campos marcados en el formulario.”
Permission Denied (HTTP 403):
  • Redirects to error page (vendedor users cannot create suppliers)

Validation Rules

  • All fields are required
  • correo must be valid email format
  • telefono max 20 characters
  • direccion max 200 characters

Update Supplier

Requires authentication and admin role. Only the supplier owner can update.

URL Parameters

integer
required
Supplier ID to update

Request Parameters

Same as Create Supplier - all fields are editable.

Response

Success (HTTP 302):
  • Redirects to /proveedores/
  • Flash message: “Proveedor actualizado correctamente.”
Not Found (HTTP 404):
  • Supplier doesn’t exist or doesn’t belong to authenticated user
Validation Error (HTTP 200):
  • Re-renders form with error messages

Delete Supplier

Requires authentication and admin role. Can delete suppliers even if referenced in purchases (SET_NULL constraint).

URL Parameters

integer
required
Supplier ID to delete

Response

Success (HTTP 302):
  • Supplier deleted
  • Associated purchases have proveedor field set to NULL
  • Redirects to /proveedores/
  • Flash message: “Proveedor eliminado correctamente.”
Not Found (HTTP 404):
  • Supplier doesn’t exist or doesn’t belong to user

GET Request

Accessing the delete URL via GET shows confirmation page:
Renders confirmation template.

Business Logic

Relationship with Purchases

Suppliers are linked to purchases via SET_NULL foreign key:
When a supplier is deleted:
  • Purchase records are preserved
  • proveedor field set to NULL
  • Purchase history remains intact

Multi-Tenancy

Suppliers are isolated per user:
  • Admin users see only their own suppliers
  • Vendedor users see suppliers owned by their creado_por admin
  • Enforced at database level: usuario foreign key
  • Enforced in views: Proveedor.objects.filter(usuario=request.user)

Ordering

Suppliers are always returned sorted alphabetically by name:

Example Workflow

Complete Supplier Management

Supplier Data Export Example

  • Purchases API - Create purchase orders with suppliers
  • See source: applications/proveedores/models.py and applications/proveedores/views.py
    • Model definition: /home/daytona/workspace/source/applications/proveedores/models.py
    • View logic: /home/daytona/workspace/source/applications/proveedores/views.py
    • URL routing: /home/daytona/workspace/source/applications/proveedores/urls.py

Field Constraints Summary

Permission Matrix