Overview
The Purchases API handles two types of purchases:- Product purchases - Inventory replenishment with automatic stock updates
- Asset/furniture purchases - Fixed assets and equipment
Compra Model (Purchase)
Unique purchase identifier (auto-generated)
Foreign key to Proveedor (supplier, optional)
Purchase timestamp (default: current time)
Purchase type:
productos or activosTotal purchase amount (10 digits, 2 decimals, default: 0.00)
Foreign key to User who created the purchase
CompraDetalle Model (Purchase Detail)
Detail line identifier
Foreign key to parent Compra
Foreign key to Producto (optional, null for new products)
Product category (max 255 characters, optional)
Quantity purchased (positive integer, default: 1)
Unit purchase price WITHOUT IVA (10 digits, 2 decimals)
Unit price WITH IVA (auto-calculated, default: 0.00)
Line total with IVA (cantidad × precio_con_iva, default: 0.00)
Selling price to set for this batch (10 digits, 2 decimals)
Whether product has expiration date (default: false)
Expiration date (required if tiene_caducidad=true)
Activo Model (Asset)
Asset identifier
OneToOne foreign key to Compra (tipo=‘activos’)
Asset name (max 255 characters)
Asset description (optional)
Asset value (10 digits, 2 decimals)
Acquisition date
Gasto Model (Expense)
Expense identifier
Foreign key to User
Expense concept (max 150 characters)
Detailed description (optional)
Amount (12 digits, 2 decimals)
Expense date (auto-set on creation)
List Purchases
Response
Returns rendered HTML with list of purchases for the authenticated user.Create Purchase (Products)
Request Parameters
Purchase type:
productos or activosSupplier ID (optional)
Total amount (typically calculated from details)
Adding Purchase Details
Details are added separately (typically via formset in web UI):Existing product ID (optional, can create new product)
Product category for new products
Quantity purchased
Unit price WITHOUT IVA
Selling price to set for product
Whether product expires
Expiration date (YYYY-MM-DD format, required if tiene_caducidad=true)
Response
Success: Redirects to purchase list with flash messageBusiness Logic on Purchase Creation
- Stock Update:
producto.stock += cantidad - Price Update:
producto.precio_compra = precio - Selling Price:
producto.precio = precio_venta - IVA Calculation:
precio_con_iva = precio * 1.19(19% tax) - Subtotal:
subtotal_con_iva = cantidad * precio_con_iva
Create Purchase (Assets)
Asset Parameters
Asset name
Asset description
Asset value
Acquisition date (YYYY-MM-DD)
View Purchase Detail
Purchase ID
Response
Returns rendered HTML with purchase details including all line items.Delete Purchase
Purchase ID to delete
Response
Success: Purchase and related details/assets deleted, redirects to listDeleting a purchase does NOT restore product stock. Consider carefully before deletion.
AJAX/API Endpoints
Get Product Data
Product ID to fetch
Response
Get Purchase Detail (AJAX)
Purchase ID
Response
Expenses (Gastos)
List Expenses
Create Expense
Expense concept (max 150 characters)
Detailed description (optional)
Amount (e.g., “2500000.00”)
Response
Success: Expense created, redirects to expenses listUpdate Expense
Expense ID to update
Delete Expense
Expense ID to delete
Example Workflow
Complete Purchase Flow
Related Endpoints
- Products API - Stock updates from purchases
- Suppliers API - Purchase order suppliers
- See source:
applications/compras/models.pyandapplications/compras/views.py