蜡眨眼 / laracount
laravel的会计服务
v0.2
2021-11-16 13:00 UTC
Requires
- php: ^8.0
- illuminate/cache: ^8.67
- illuminate/container: ^8.67
- illuminate/contracts: ^8.67
- illuminate/database: ^8.67
- waxwink/accounting: 0.1.1
Requires (Dev)
- orchestra/testbench: ^6.22
- phpunit/phpunit: ^9.5
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; } //.... }
这就完了。现在您可以使用上述方法了。