byrokrat / billing
This package is abandoned and no longer maintained.
No replacement package was suggested.
Data types for creating and formatting invoices
2.1.0
2019-12-15 13:00 UTC
Requires
- php: >=7.1
- byrokrat/amount: ^2
- byrokrat/banking: ^2
- byrokrat/checkdigit: ^2
- byrokrat/id: ^2
- setasign/fpdf: ~1.7.0
Requires (Dev)
- hanneskod/readme-tester: 1.0-beta.3
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2019-12-15 13:13:21 UTC
README
ABANDONED! This package is discontinued and will not be updated.
Billing
Data types for creating and formatting invoices.
Installation
composer require byrokrat/billing
Usage
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();
Implementing your own billables and agents
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.
API
InvoiceBuilder
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 |
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 |
ItemBasket
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 |