Invoices Manager
Generate and manage your invoices / payments using multi currencies and multi types in FilamentPHP
Author:
Fady Mondy
Documentation
- Features
- Screenshots
- Installation
- Using
- Invoice Templates
- Export Invoice as PDF
- Send Invoice via Email
- Invoice Settings
- Use Facade Class To Create Invoice
- Publish Assets
- Other Filament Packages

Generate and manage your invoices / payments using multi currencies and multi types in FilamentPHP
#Features
- Generate Invoices
- Manage Invoices
- Print Invoices
- Invoices Facade Class
- Invoices Morph From/For
- Invoices Payments
- Support Multi Type
- Support Multi Currency
- Support Multi Status
- Status Manager
- Invoices Widgets
- Send Invoice via Email (with PDF attachment)
- Export Invoice as PDF (DomPDF)
- Invoice Templates (5 built-in templates, extensible via Factory Pattern)
- Invoice Settings (Settings Hub integration)
- Print Pay Slip for Payments
#Screenshots

#Installation
composer require tomatophp/filament-invoices
after install your package please run this command
php artisan filament-invoices:install
finally register the plugin on /app/Providers/Filament/AdminPanelProvider.php
->plugin(\TomatoPHP\FilamentInvoices\FilamentInvoicesPlugin::make())
#Enable Settings Hub
To enable the Invoice Settings page in the Settings Hub, use the useSettingsHub() method:
->plugin(
\TomatoPHP\FilamentInvoices\FilamentInvoicesPlugin::make()
->useSettingsHub()
)
Don't forget to publish the settings migration:
php artisan vendor:publish --tag="filament-invoices-settings-migrations"
php artisan migrate
#Using
to start use this plugin you need to allow 2 types of users or table to fill the invoices from / for after you prepare your models use this Facade class like this on your AppServiceProvider or any other service provider
use TomatoPHP\FilamentInvoices\Facades\FilamentInvoices;
use TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceFor;
use TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceFrom;
public function boot()
{
FilamentInvoices::registerFor([
InvoiceFor::make(Account::class)
->label('Account')
]);
FilamentInvoices::registerFrom([
InvoiceFrom::make(Company::class)
->label('Company')
]);
}
after that you can use the plugin on your filament admin panel
#Invoice Templates
The package comes with 5 built-in invoice templates:
- Classic - Traditional professional invoice layout
- Modern - Contemporary design with gradient header
- Minimal - Clean and simple design
- Professional - Business-oriented with sidebar
- Creative - Bold and colorful design
#Register Custom Templates
You can register your own templates using the Factory pattern:
use TomatoPHP\FilamentInvoices\Services\Templates\TemplateFactory;
use TomatoPHP\FilamentInvoices\Contracts\InvoiceTemplateInterface;
// In your service provider boot method
TemplateFactory::register('my-custom', MyCustomTemplate::class);
Your custom template class must implement InvoiceTemplateInterface:
use TomatoPHP\FilamentInvoices\Contracts\InvoiceTemplateInterface;
use TomatoPHP\FilamentInvoices\Services\Templates\AbstractTemplate;
class MyCustomTemplate extends AbstractTemplate
{
public function getName(): string
{
return 'my-custom';
}
public function getLabel(): string
{
return 'My Custom Template';
}
public function getDescription(): string
{
return 'A custom invoice template';
}
public function getViewPath(): string
{
return 'my-package::templates.custom';
}
}
#Export Invoice as PDF
You can export invoices as PDF from:
- The invoice view page (Export PDF button)
- The invoices table (row action)
- Bulk export multiple invoices as ZIP
#Programmatic PDF Generation
use TomatoPHP\FilamentInvoices\Services\PdfGenerator;
$pdfGenerator = app(PdfGenerator::class);
// Generate PDF content
$pdfContent = $pdfGenerator->generate($invoice, 'modern');
// Stream to browser
return $pdfGenerator->stream($invoice, 'classic');
// Download file
return $pdfGenerator->download($invoice, 'professional');
#Send Invoice via Email
Send invoices via email with PDF attachment from:
- The invoice view page (Send Email button)
- The invoices table (row action)
- Bulk send to multiple invoices
Email settings can be configured in the Invoice Settings page, including:
- Default email subject and body templates
- CC/BCC addresses
- From name and email
#Available Placeholders
Use these placeholders in email subject and body:
{uuid}- Invoice number{company_name}- Your company name{customer_name}- Customer name{total}- Invoice total amount{currency}- Currency code{due_date}- Due date
#Programmatic Email Sending
use TomatoPHP\FilamentInvoices\Mail\InvoiceMail;
use Illuminate\Support\Facades\Mail;
Mail::to('customer@example.com')->send(new InvoiceMail(
invoice: $invoice,
template: 'modern',
cc: 'accounts@company.com',
subject: 'Your Invoice #{uuid}',
body: 'Dear {customer_name}, please find your invoice attached.'
));
#Invoice Settings
The Invoice Settings page (accessible via Settings Hub when enabled) allows you to configure:
#Company Information
- Company name, logo, address
- Phone, email, tax ID
#Default Settings
- Default currency
- Default tax rate
- Default payment terms (days)
#Email Configuration
- From name and email
- Email subject and body templates
- CC/BCC addresses
#PDF Options
- Default template
- Paper size (A4, Letter, Legal)
- Terms and conditions text
#Use Facade Class To Create Invoice
you can use this Facade class to create invoice like this
\TomatoPHP\FilamentInvoices\Facades\FilamentInvoices::create()
->for(\App\Models\Account::find(1))
->from(\App\Models\Account::find(2))
->dueDate(now()->addDays(7))
->date(now())
->items([
\TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceItem::make('Item 1')
->description('Description 1')
->qty(2)
->price(100),
\TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceItem::make('Item 2')
->description('Description 2')
->qty(1)
->discount(10)
->vat(10)
->price(200),
])->save();
#Publish Assets
you can publish config file by use this command
php artisan vendor:publish --tag="filament-invoices-config"
you can publish views file by use this command
php artisan vendor:publish --tag="filament-invoices-views"
you can publish languages file by use this command
php artisan vendor:publish --tag="filament-invoices-lang"
you can publish migrations file by use this command
php artisan vendor:publish --tag="filament-invoices-migrations"
#Other Filament Packages
Checkout our Awesome TomatoPHP
The author
Generate and manage your invoices / payments using multi currencies and multi types in FilamentPHP
From the same author
Tenancy Multi-database
Tenancy multi-database integration for FilamentPHP
Author:
Fady Mondy
Menu Generator
Menu view generator using view component
Author:
Fady Mondy
Translations Manager
Manage your translation with DB and cache, you can scan an collect translation strings like `trans()` and `__()`, and translate them using UI
Author:
Fady Mondy
Meta Manager
Convert any model on your app to pluggable model using Meta and get ready to use relation manager on FilamentPHP panel
Author:
Fady Mondy
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese