---
tags: [inventory, model]
module: Inventory
---

# [Model]Requisition

## Connections
[[_Inventory]] · [[[Model]Warehouse]] · [[[Model]WarehouseProductLog]] · [[[Controller]RequisitionsController]] · [[[Service]RequisitionServices]] · [[[Repo]Repositories]] · [[[Enum]Enums]] · [[[Cross]CrossModuleDependencies]]

## Source
`Modules/Inventory/Models/Requisition.php` · `Modules/Inventory/Models/RequisitionProduct.php` · `Modules/Inventory/Models/RequisitionAttachment.php`

## Responsibilities
- Stock movement request: INBOUND (from supplier) / OUTBOUND (to customer) / TRANSFER (between warehouses)
- Lifecycle: PENDING → ACCEPTED | REJECTED | CONVERTED
- RequisitionProduct: line items (product, qty, price, tax_id, vat_value, discount)
- RequisitionAttachment: private file attachments (UPLOAD_PATH = 'requisitions')
- ConvertToInvoiceTrait: validates same cost center, stock availability, product existence
- Auditable, SoftDeletes, UsesTenantConnection

## Key Relationships
| Relation | Type | Target |
|---|---|---|
| warehouse | belongsTo | [[[Model]Warehouse]] (destination) |
| fromWarehouse | belongsTo | [[[Model]Warehouse]] (TRANSFER source) |
| supplier | belongsTo | Supplier (Purchases) |
| customer | belongsTo | Customer (Sales) |
| createdBy | belongsTo | [[[Model]User]] (CompanyUser) |
| requisitionProducts | hasMany | RequisitionProduct |
| requisitionAttachments | hasMany | RequisitionAttachment |

## Business Rules
- `canBeEdited()`: status == PENDING only
- `canBeDeleted()`: PENDING or REJECTED, or ACCEPTED with no stock_movement applied
- `getCanBeConvertedToInvoiceAttribute()`: same cost center, sufficient quantity, product available
