dgtlinf/invoice

A modern, extensible and framework-agnostic Laravel package for generating professional invoices — with pricing, tax, discount, currency, and PDF engines.

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/dgtlinf/invoice

v1.0.0 2025-10-13 14:37 UTC

This package is auto-updated.

Last update: 2025-10-13 14:44:33 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total Downloads License PHP Version Laravel Version

Modern, fully typed invoicing toolkit for Laravel applications with discount, tax, currency and PDF engines that work together out of the box.

Highlights

  • Value-object based models and enums for rock-solid invoice data.
  • Dedicated pricing, tax, discount and numbering engines with sensible defaults.
  • Built-in DomPDF integration with publishable Blade templates.
  • Currency formatter, units and helpers that keep calculations precise.
  • Batteries-included facade: Invoice::make(), Invoice::calculate(), Invoice::stream() and more.

Requirements

  • PHP 8.2+
  • Laravel 10.x, 11.x or 12.x
  • barryvdh/laravel-dompdf (installed automatically)

Install

composer require dgtlinf/invoice

Publish the configuration or default PDF view if you need to customise them:

php artisan vendor:publish --tag="invoice-config"
php artisan vendor:publish --tag="invoice-views"

Quick usage

use Dgtlinf\Invoice\Facades\Invoice;
use Dgtlinf\Invoice\Models\{LineItem, Party, PaymentDetails, Tax, Quantity, Money};
use Dgtlinf\Invoice\Support\{Currency, UnitType, InvoiceType};

Route::get('/invoice', function () {
    $currency = Currency::fromConfig();

    $seller = new Party(name: 'DEMO COMPANY ACME LTD', address: 'Main Street 123456', taxId: '123456789');
    $buyer = new Party(name: 'Acme, Inc.', address: '1234 Goto street', taxId: '11-2222222');

    $items = [
        new LineItem(
            description: 'Monthly retainer fee',
            quantity: Quantity::from(1),
            unitPrice: Money::from(15000, $currency),
            tax: new Tax('VAT', 0, Money::from(0, $currency)),
            unit: UnitType::MONTH
        ),
        // ...more items, discounts, etc.
    ];

    $items = Invoice::applyItemDiscounts($items);

    $payment = new PaymentDetails(
        bankName: 'GREAT BANK OF WORLD, London, UK',
        accountNumber: '000-000000000-11',
        iban: 'UK000000000000000'
    );

    $invoice = Invoice::make([
        'number' => 'INV0001',
        'type' => InvoiceType::INVOICE,
        'seller' => $seller,
        'buyer' => $buyer,
        'items' => $items,
        'amountPaid' => Money::from(0, $currency),
        'paymentDetails' => $payment,
        'note' => 'The VAT calculation date is the date of supply.',
        'dueAt' => now()->addDays(7),
    ]);

    return Invoice::stream(Invoice::calculate($invoice));
});

Documentation

Full documentation, usage examples, and advanced configuration guides are available at:
👉 https://dgtlinf.github.io/invoice

License

This package is open-sourced software licensed under the MIT License.
© 2025 Digital Infinity DOO. All rights reserved.