---
tags: [purchases, controller]
module: Purchases
---

# [Controller]Controllers

## Connections
[[_Purchases]] · [[[Model]Supplier]] · [[[Model]PurchaseBill]] · [[[Model]BillReturn]] · [[[Model]PurchaseOrder]] · [[[Model]Expense]] · [[[Model]SupplierPaymentReceipt]] · [[[Service]SupplierServices]] · [[[Service]PurchaseBillServices]] · [[[Service]BillReturnServices]] · [[[Service]SupplierReceiptServices]] · [[[Service]PurchaseOrderServices]] · [[[Service]ExpenseServices]] · [[[Routes]Routes]]

## Source
`Modules/Purchases/Http/Controllers/`

All web controllers extend `TenantBaseController`.

---

## SupplierController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List suppliers (DataTables / AJAX JSON) |
| create | GET | Show creation form |
| store | POST | Create supplier, redirect to referenced route |
| show | GET | Supplier detail page |
| edit | GET | Edit form |
| update | PUT | Update supplier |
| destroy | DELETE | Delete supplier |
| changeStatus | GET | Toggle active/inactive |
| export | GET | Export to XLSX |
| emptyFile | GET | Download import template |
| printSuppliersList | GET | Print to PDF |

---

## PurchaseBillController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List bills (DataTables, default current_year filter) |
| create | GET | Creation form |
| store | POST | Create bill; converts base64 attachments; locks journal entry; dispatches FillOpeningClosingBalance |
| show | GET | Bill detail |
| edit | GET | Edit form (blocked if has returns/receipts) |
| update | PUT | Update bill; deletes old JE; handles save_as_draft |
| destroy | DELETE | Delete (blocked if has returns/receipts) |
| destroyWithEntries | DELETE | Delete + reverse journal entries |
| clone | GET | Pre-fill create form from existing bill |
| assignReceipts | POST | Assign supplier receipts to bill |
| checkInvoiceReferenceNumber | GET | AJAX duplicate ref-num check |
| checkIfPurchaseBillHasBillReturnOrSupplierReceipts | GET | AJAX editability check |
| export | GET | XLSX export |
| exportAllPdf | GET | PDF download (filtered) |
| exportAllPrint | GET | PDF inline print (filtered) |

---

## BillReturnController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List returns (default current_year filter) |
| create | GET | Form (checks purchase-returns account active) |
| store | POST | Create return; checks account; locks JE |
| show | GET | Detail |
| edit / update | GET / PUT | Edit return |
| destroy | DELETE | Delete (blocked if has receipts) |
| destroyWithEntries | DELETE | Delete + reverse JE |
| assignReceipts | POST | Assign receipts to return |
| clone | GET | Clone to create form |
| export / exportAllPdf / exportAllPrint | GET | XLSX / PDF exports |

---

## PurchaseOrderController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List POs |
| create / store | GET / POST | Create PO |
| show | GET | Detail |
| edit / update | GET / PUT | Edit PO |
| destroy | DELETE | Delete PO |
| clone | GET | Clone PO |
| export | GET | XLSX export |

---

## ExpenseController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List expenses (default current_year filter) |
| create / store | GET / POST | Create expense; locks JE |
| show | GET | Detail |
| destroy | DELETE | Delete (date constraint: can't delete before expense date) |
| destroyWithEntries | DELETE | Delete + reverse JE |
| clone | GET | Clone to create form |
| export / exportAllPdf / exportAllPrint | GET | XLSX / PDF exports |

---

## SupplierReceiptController
| Method | HTTP | Purpose |
|---|---|---|
| index | GET | List receipts (DataTables) |
| create / store | GET / POST | Create receipt; locks JE |
| show | GET | Detail |
| edit / update | GET / PUT | Edit receipt |
| destroy | DELETE | Delete (date constraint) |
| destroyWithEntries | DELETE | Delete + reverse JE |
| clone | GET | Clone to create form |
| currentReceiptInvoices | GET | AJAX — available bills for given supplier |
| checkInvoiceReferenceNumber | GET | AJAX duplicate check |
| export / exportAllPdf / exportAllPrint | GET | XLSX / PDF exports |

---

## TransactionController
Aggregates all purchase transactions (bills + returns + expenses + receipts) in one list with XLSX / PDF / print exports.

---

## Single-Action Controllers
| Class | Purpose |
|---|---|
| CreatingPurchaseBillFromPurchaseOrderController | Convert PO → Bill form |
| CreatingBillReturnFromBillController | Create return from existing bill |
| AssigningReceiptToBillController | POST assign receipt ↔ bill |
| UnassigningBillFromReceiptController | Unassign bill from receipt |
| UnassigningBillReturnFromReceiptController | Unassign bill return from receipt |
| SendPurchaseBillToEmailController | Email bill PDF |
| SendBillReturnToEmailController | Email return PDF |
| SendPurchaseOrderToEmailController | Email PO PDF |
| SendExpenseToEmailController | Email expense PDF |
| DownloadingPurchaseBillAttachmentController | Download bill attachment file |
| DownloadingBillReturnAttachmentController | Download return attachment |
| DownloadingExpenseAttachmentController | Download expense attachment |
| DownloadingSupplierReceiptAttachmentController | Download receipt attachment |
| ImportingSuppliersController | Excel bulk import of suppliers |
| PDFPurchaseBillController | Generate bill PDF |
| PDFBillReturnController | Generate return PDF |
| PDFPurchaseOrderController | Generate PO PDF |
| PrintingPurchaseBillController | Print bill inline |
| PrintingBillReturnController | Print return inline |
| PrintingPurchaseOrderController | Print PO inline |
| PrintingSupplierReceiptController | Print receipt inline |
| PrintingExpenseController | Print expense inline |
