sirprize / invoiced
发票的总额、小计、行小计、增值税计算和正确的舍入
2.0.0
2023-02-18 15:26 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-18 19:12:26 UTC
README
发票的总额、小计、行小计、增值税计算和正确的舍入
感谢
使用方法
Invoiced 处理金额(以分计)
折扣解析器
折扣解析器运行一系列自定义规则,用于确定从给定产品价格中减去的金额。
定义自定义规则
class TwentyPercentRule implements RuleInterface
{
protected $product = null;
public function __construct(\Product $product)
{
$this->product = $product;
}
public function getAmount()
{
return $this->product->getPrice() * 0.2;
}
}
运行规则
use Sirprize\Invoiced\BasePrice\Discount\Resolver;
use Sirprize\Invoiced\BasePrice\Discount\RuleInterface;
$product = new \Product(); // this can be anything really...
$resolver = new Resolver(Resolver::BEST); // the rule returning the biggest amount wins
$resolver->addRule(new TwentyPercentRule($product));
$discountAmount = $resolver->getAmount($product->getPrice());
$finalPrice = $product->getPrice() - $discountAmount;
发票
发票行项目
use Sirprize\Invoiced\VatPrice\LineItem;
$lineItem = new LineItem(780, 19, true, 1); // $amount, $vatRate, $priceIncludesVat, $quantity
// line item totals
$lineItemGrossTotal = $lineItem->getPrice()->getGrossAmount();
$lineItemVatTotal = $lineItem->getPrice()->getVatAmount();
$lineItemNetTotal = $lineItem->getPrice()->getNetAmount();
// unit
$unitGrossAmount = $lineItem->getUnitPrice()->getGrossAmount();
$unitVatAmount = $lineItem->getUnitPrice()->getVatAmount();
$unitNetAmount = $lineItem->getUnitPrice()->getNetAmount();
发票总额
use Sirprize\Invoiced\VatPrice\LineItem;
use Sirprize\Invoiced\VatPrice\Sum;
$sum = new Sum();
$sum
->addLineItem(new LineItem(780, 19, true, 1))
->addLineItem(new LineItem(2500, 7, true, 1))
;
$grossTotalAmount = $sum->getPrice()->getGrossAmount();
$vatTotalAmount = $sum->getPrice()->getVatAmount();
$netTotalAmount = $sum->getPrice()->getNetAmount();
小计
发票通常包含各种小计,如折扣、项目总额、运费和手续费等。
基础价格
基础价格只是一个简单的对象,包含基础价格、折扣金额和产品的最终价格。
use Sirprize\Invoiced\BasePrice\Price;
$price = new Price(1000, 220); // $baseAmount, $discountAmount
$baseAmount = $price->getBaseAmount();
$discountAmount = $price->getDiscountAmount();
$finalAmount = $price->getFinalAmount();
基础价格行项目
use Sirprize\Invoiced\BasePrice\LineItem;
$lineItem = new LineItem($price, 3); // $price, $quantity
// line item totals
$lineItemBaseAmount = $lineItem->getPrice()->getBaseAmount();
$lineItemDiscountAmount = $lineItem->getPrice()->getDiscountAmount();
$lineItemFinalAmount = $lineItem->getPrice()->getFinalAmount();
// unit
$unitBaseAmount = $lineItem->getUnitPrice()->getBaseAmount();
$unitDiscountAmount = $lineItem->getUnitPrice()->getDiscountAmount();
$unitFinalAmount = $lineItem->getUnitPrice()->getFinalAmount();
基础价格总额
然后将基础价格添加到行项目中并求和。
use Sirprize\Invoiced\BasePrice\LineItem;
use Sirprize\Invoiced\BasePrice\Sum;
use Sirprize\Invoiced\BasePrice\Price;
$sum = new Sum();
$sum
->addLineItem(new LineItem(new Price(1000, 220), 3))
->addLineItem(new LineItem(new Price(3000, 500), 10))
;
$baseTotalAmount = $sum->getPrice()->getBaseAmount();
$discountTotalAmount = $sum->getPrice()->getDiscountAmount();
$finalTotalAmount = $sum->getPrice()->getFinalAmount();
许可证
查看 LICENSE。