realtyhub/invoice-painter-bundle

此包已被弃用且不再维护。未建议替代包。
关于此包最新版本(dev-master)无可用许可证信息。

Symfony2 Bundle,用于生成PDF发票

dev-master 2018-04-24 10:24 UTC

This package is not auto-updated.

Last update: 2022-10-01 06:05:13 UTC


README

Freelance Banner

Invoice Painter Bundle

此Symfony2包的简单目的是帮助您的应用程序生成PDF发票。它不涉及与您的定价或支付系统相关的逻辑,这项工作仍然由您的应用程序执行。

安装和配置

Composer.json

{
    ...
    "require": {
        "realtyhub/invoice-painter-bundle": "dev-master"
    }
}

AppKernel.php

<?php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Realtyhub\InvoicePainterBundle\RealtyhubInvoicePainterBundle(),
    );
}

config.yml

realtyhub_invoice_painter:
    currency_symbol: "dollar" #supported options 'dollar', 'pound', 'euro', 'yen'
    tax_short_name: "TAX" #Can be any string you like, such as "VAT" or "GST"

基本用法

//Inside controller file
use Realtyhub\InvoicePainterBundle\Entity\InvoicePainterDataContainer;
use Realtyhub\InvoicePainterBundle\Entity\InvoicePainterItem;

class DefaultController extends Controller
{    
    public function invoiceTestAction()
    {
        $invoiceData = new InvoicePainterDataContainer();
    
        $invoiceData->setInvoiceDate( new \DateTime() );
        $invoiceData->setTaxNumber( '200 122 492' );
        $invoiceData->setInvoiceNumber( 'INV00034' );
    
    
        $invoiceData->addClientNameLine('Your clients name');
        $invoiceData->addClientNameLine('or clients business name');
    
        $invoiceData->addClientAddressLine('89 Green Road');
        $invoiceData->addClientAddressLine('Melbourne, VIC');
        $invoiceData->addClientAddressLine('Australia');
        $invoiceData->addClientAddressLine('3000');
    
        $invoiceData->addCompanyNameLine('Your Company Name');
        $invoiceData->addCompanyNameLine('Another line of your company name');
    
        $invoiceData->addCompanyAddressLine('920 Smith Street');
        $invoiceData->addCompanyAddressLine('Sydney, NSW');
        $invoiceData->addCompanyAddressLine('Australia');
        $invoiceData->addCompanyAddressLine('2000');
    
        $invoiceData->addInvoiceItem( InvoicePainterItem::createFromParams(1499, 0.2, 'Dell Laptop', new \DateTime() ) );
        $invoiceData->addInvoiceItem( InvoicePainterItem::createFromParams(119, 0.2, 'Canon Computer Printer', new \DateTime() ) );
        $invoiceData->addInvoiceItem( InvoicePainterItem::createFromParams(6, 0.2, 'A4 printer paper', new \DateTime() ) );
    
        return $this->forward('realtyhub_invoice_painter:paintAction', array('invoiceData' => $invoiceData));
    
    }

### 使用InvoicePainterItemInterface的替代技术

您可能已经有一个直接与发票项目相关的实体。例如,您的实体可能已经包含销售价格、税率、描述和销售日期。

在这种情况下,您可以令此实体实现InvoicePainterItemInterface

//Some entity file
use Realtyhub\InvoicePainterBundle\Entity\InvoicePainterItemInterface;

/**
 * @ORM\Table(name="sales_history")
 * @ORM\Entity()
 */
class SalesHistory implements InvoicePainterItemInterface
{

    /**
     * @ORM\Column(name="description", type="string", length=255)
     */
    private $description;
    
    /**
     * @ORM\Column(name="sale_at", type="datetime")
     */
    private $saleAt;
    
    /**
     * @ORM\Column(name="price_ex_tax", type="float")
     */
    private $priceExTax;
    
    /**
     * @ORM\Column(name="tax_rate", type="float")
     */
    private $taxRate;
    
    //Implement methods from InvoicePainterItemInterface
    public function getInvoicePainterAmountEx()
    {
         return $this->priceExTax;
    }

    public function getInvoicePainterTaxRate()
    {
         return $this->taxRate;
    }

    public function getInvoicePainterDate()
    {
         return $this->saleAt;
    }
   
    public function getInvoicePainterDescription()
    {
         return $this->description;
    }

//changes required in the controller action


$salesHistory = $salesHistoryRepository->findAll();

foreach ($salesHistory as $sale)
{
    // $sale will be instance of SalesHistory 
    $invoiceData->addInvoiceItem( InvoicePainterItem::createFromInterface($sale) ); //instead of $invoiceData->addInvoiceItem( InvoicePainterItem::createFromParams(1499, 0.2, 'Dell Laptop', new \DateTime() ) );
}