蜡眨眼/laracount

laravel的会计服务

v0.2 2021-11-16 13:00 UTC

This package is auto-updated.

Last update: 2024-09-16 19:34:12 UTC


README

此包可以通过简单的方法和强大的功能来管理Laravel应用程序的会计。这些功能包括

  • 从钱包存入和取出
  • 计算从用户那里收到的总金额(银行账户余额)
  • 计算系统的总收入和支出
  • 可以处理税务支付,并计算已支付的总税额
  • 可以通过锁定功能处理竞争条件
  • 可以生成重要报告

安装

安装非常简单。需要这个包

composer require waxwink/laracount 

然后安装它

php artisan accounting:install

现在我们准备好了。

基本用法

API非常易于使用,因为您大部分时间都在处理的主要服务是AccountingService。您可以使用容器创建一个服务对象并开始使用其方法

use Waxwink\Laracount\AccountingService;

$service = app(AccountingService::class);

存入

用户可以向他们的账户存入资金

$service->deposit($user, 15000);

取出

用户可以从他们的账户中取出资金

$service->withdraw($user, 7000);

支付

用户可以为服务、产品或其他事物支付

$service->pay($user, 3000);

Laracount不关心发票或支付的原因,它只负责会计。但是,可以通过传递一个ref_id来跟踪交易并用于报告目的。这个键可以是发票号码或任何其他东西。

$service->pay($user, 3000, $refId);

支付给

系统也可以向用户支付,比如每月利润或用户提供的服务(如开车、维修等)

$service->payTo($user, 3000);

退款

用户可以退款

$service->refund($user, 1000);

Laracount不关心退款的原因、金额或之前是否已支付过。像之前的方法一样,可以通过ref_id键跟踪交易。

$service->pay($user, 1000, $refId);

余额

可以检索账户余额

$service->balance($user);

其他余额API

可以通过以下方式检索银行、收入和支出余额

$service->bankBalance();
$service->revenueBalance();
$service->expenseBalance();
$service->bankBalanceByRef($refId);
$service->revenueBalanceByRef($refId);
$service->expenseBalanceByRef($refId);

交易列表

可以获取账户的交易列表

$service->transactionsList($user);

可以通过这种方式分页交易

$service->transactionsList($user, paginate: true, perPage:5, page:2);

也可以定义列

$service->transactionsList($user, columns:['balance', 'created_at', 'description']);

可以按这种方式排序条目

$service->transactionsList($user, orderBy: "created_at");
$service->transactionsList($user, orderBy: "created_at", direction:"asc");

也提供日期过滤

$service->transactionsList($user, from:"2017-02-01");
$service->transactionsList($user, from:"2017-02-01", to:"2020-01-01");

酷吧?

在使用上述方法之前,有一些小事情需要注意。用户应提供account_id,并且该ID必须大于10,因为前十个ID是为非用户账户(如银行、收入、支出等)预留的。因此,您必须实现HasAccount接口并使用HasAccountTrait。因此,您的用户模型可能如下所示

use Illuminate\Database\Eloquent\Model;
use Waxwink\Accounting\Contracts\HasAccount;
use Waxwink\Laracount\Concerns\HasAccountTrait;

class User extends Model implements HasAccount
{
    use HasAccountTrait;
    
}

您还应该知道,客户应在accounts表中注册。我们有一个服务用于此目的,它应该每个用户只使用一次(例如,在注册时)

$registrationService= app(\Waxwink\Laracount\AccountRegistrationService::class);
$registrationService->registerAccountFor($user);

当您将此代码放入注册控制器中时,它将变成这样

class RegisterController extends Controller

    // ..... 
    
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(protected AccountRegistrationService $accountRegistrationService)
    {
        $this->middleware('guest');
    }
    
    // ....
    
    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\Models\User
     */
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
        $this->accountRegistrationService->registerAccountFor($user);
        return $user;
    }
    //....
}

这就完了。现在您可以使用上述方法了。