byrokrat / billing
Data types for creating and formatting invoices
Installs: 24
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 3
Forks: 3
Open Issues: 0
pkg:composer/byrokrat/billing
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:
Billablerepresents a purchasable item.AgentInterfacerepresents 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 |