承接 sirprize/invoiced 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sirprize/invoiced

Composer 安装命令:

composer require sirprize/invoiced

包简介

Totals, subtotals, linetotals, VAT-calculations and proper rounding for invoices.

README 文档

README

Totals, subtotals, linetotals, VAT-calculations and proper rounding for invoices.

Thanks

See Invoices: How to properly round and calculate totals

Usage

Invoiced handles money amounts in cents.

Discount Resolver

Discount resolver runs a set of custom rules in charge of figuring out an amount to subtract from a given product price.

Defining a custom rule

class TwentyPercentRule implements RuleInterface
{
    protected $product = null;

    public function __construct(\Product $product)
    {
        $this->product = $product;
    }

    public function getAmount()
    {
        return $this->product->getPrice() * 0.2;
    }
}

Running the rules

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;

Invoice

Invoice Line Item

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();

Invoice Sum

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();

Subtotals

Invoices often feature all kinds of subtotals such as discounts, items total, shipping and handling etc.

Base Price

A base price is just a simple object holding the baseprice, the discount amount and the final price of a product:

use Sirprize\Invoiced\BasePrice\Price;

$price = new Price(1000, 220); // $baseAmount, $discountAmount

$baseAmount = $price->getBaseAmount();
$discountAmount = $price->getDiscountAmount();
$finalAmount = $price->getFinalAmount();

Base Price Line Item

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();

Base Price Sum

Base prices are then added to line items and summed up:

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

See LICENSE.

sirprize/invoiced 适用场景与选型建议

sirprize/invoiced 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 116 次下载、GitHub Stars 达 3, 最近一次更新时间为 2013 年 03 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「vat」 「invoices」 「rounding」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 sirprize/invoiced 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 sirprize/invoiced 我们能提供哪些服务?
定制开发 / 二次开发

基于 sirprize/invoiced 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 116
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2013-03-06