vswarte/laravel-ledger

此包已弃用,不再维护。没有建议替代包。
关于此包最新版本(dev-master)没有提供许可信息。

简单的账本包

dev-master 2020-04-17 10:00 UTC

This package is auto-updated.

Last update: 2022-06-17 14:39:59 UTC


README

简单的包,用于跟踪货币交易。

使用方法

首先,您需要将Accountable特性添加到您希望开始跟踪交易的Eloquent模型中。

use Ledger\Accountable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable, Accountable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

创建账户

账户只是一个带有余额的实体,所有更改都将在这类账户上执行。单个可负责的实体可以拥有多个账户。您可以为单个用户创建账户,如下所示

User::find(1)->createAccount('groceries', 'Day-to-day groceries');

第一个参数表示账户名称,这必须在Accountable的作用域内是唯一的,因为您将使用它作为标识符。第二个参数只是一个描述。

创建交易

有多种类型的交易,从简单的提款到转账。交易只是对更改进行分组的一种方式。这样,您可以轻松设置在多个账户上操作的交易。

简单借记/贷记

我们只想从/向账户中取款/存入一些资金。

use Ledger\TransactionFactory;

// 5 euro
$amount  = new Money::EUR(500);
$account = User::find(1)->account('groceries');
TransactionFactory::debit($account, $amount, 'bought some vegetables');

转账

在某些情况下,我们想要从一个账户中取款,然后将其放入不同的账户(无论是支付费用还是分配储蓄)。

use Ledger\TransactionFactory;

$amount = new Money::EUR(500);
$from   = User::find(1)->account('salary');
$to     = User::find(1)->account('car');
TransactionFactory::transfer(
    $from,
    $to,
    $amount,
    'monthly savings'
);

获取账户余额

没有查询余额,账户就没什么用处。余额本身只是所有贷记更改的总和减去借记交易的总和。

User::find(1)->account('groceries')->balance();