ABANDONED! This package is discontinued and will not be updated.
Data types for creating and formatting invoices.
composer require byrokrat/billing
Invoices
are created using the InvoiceBuilder
:
namespace byrokrat\billing;
use byrokrat\amount\Currency\EUR;
// 1 unit of a 100 EUR item with 25% VAT
$item = new Item('Description', new EUR('100'), 1, .25);
$invoice = (new InvoiceBuilder)
->setSerial('1')
->setSeller(new Agent('Company X'))
->setBuyer(new Agent('Mrs Y'))
->generateOcr()
->addItem($item)
->setAttribute('message', 'custom invoice message')
->buildInvoice();
// prints 125 (100 EUR plus 25% VAT)
echo $invoice->getInvoiceTotal();
Billing uses an interface centered design:
Billable
represents a purchasable item.AgentInterface
represents a selling or buying party.
Item
and Agent
offers simple implementations
of these interfaces, but you may of course provide your own implementations and
extend the interfaces as needed.
Method signature | description |
---|---|
setSerial(string $serial): self | Set invoice serial number |
setSeller(AgentInterface $seller): self |
Set seller |
setBuyer(AgentInterface $buyer): self |
Set buyer |
setOcr(string $ocr): self | Set invoice reference number |
generateOcr(): self | Generate invoice reference number from serial number |
addItem(Billable $billable): self |
Add billable to invoice |
setBillDate(DateTimeInterface $date): self |
Set date of invoice creation |
setExpiresAfter(int $nrOfDays): self | Set number of days before invoice expires |
setDeduction(Amount $deduction): self |
Set deduction (amount prepaid) |
setAttribute(string $key, $value): self | Set attribute defined by key |
buildInvoice(): Invoice |
Build invoice |
Method signature | description |
---|---|
getSerial(): string | Get invoice serial number |
getSeller(): AgentInterface |
Get registered seller |
getBuyer(): AgentInterface |
Get registered buyer |
getOcr(): string | Get invoice reference number |
getItems(): ItemBasket |
Get item basket |
getInvoiceTotal(): Amount |
Get charged amount (VAT included) |
getBillDate(): DateTimeInterface |
Get date of invoice creation |
getExpiresAfter(): int | Get number of days before invoice expires |
getExpirationDate(): DateTimeInterface |
Get date when invoice expires |
getDeduction(): Amount |
Get deducted prepaid amound |
getAttribute(string $key, $default = ''): mixed | Get attribute or default if attribute is not set |
getAttributes(): array | Get all loaded attributes |
Method signature | description |
---|---|
getIterator(): Traversable |
Iterate over ItemEnvelope objects |
getNrOfItems(): int | Get number of items in basket |
getNrOfUnits(): int | Get number of units in basket (each item may contain multiple units) |
getTotalUnitCost(): Amount |
Get total cost of all items (VAT excluded) |
getTotalVatCost(): Amount |
Get total VAT cost for all items |
getTotalCost(): Amount |
Get total cost of all items (VAT included) |
getVatRates(): array | Get unit and vat totals for non-zero vat rates |