Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Wallet Laravel Package

zotel/laravel-wallet

View on GitHub
Deep Wiki
Context7

Commissions

Commissions are part of purchasing goods. The commission is debited from the buyer's account and is not credited for the product. This amount is lost along the way. The commission amount can always be found in the fee column.

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

use Zotel\Wallet\Traits\CanPay;
use Zotel\Wallet\Interfaces\Customer;

class User extends Model implements Customer
{
    use CanPay;
}

Item Model

Add the HasWallet trait and ProductInterface (or ProductLimitedInterface) interface to Item model.

use Zotel\Wallet\Traits\HasWallet;
use Zotel\Wallet\Interfaces\Customer;
use Zotel\Wallet\Interfaces\Taxable;
use Zotel\Wallet\Interfaces\ProductLimitedInterface;

class Item extends Model implements ProductLimitedInterface, Taxable
{
    use HasWallet;

    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
    {
        /**
         * If the service can be purchased once, then
         *  return !$customer->paid($this);
         */
        return true; 
    }

    public function getAmountProduct(Customer $customer): int|string
    {
        return 100;
    }

    public function getMetaProduct(): ?array
    {
        return [
            'title' => $this->title, 
            'description' => 'Purchase of Product #' . $this->id,
        ];
    }

    public function getFeePercent()
    {
        return 0.03; // 3%    
    }
}

Tax process

Find the user and check the balance.

$user = User::first();
$user->balance; // 103

Find the goods and check the cost.

$item = Item::first();
$item->getAmountProduct($user); // 100

The user can buy a product, buy...

$user->pay($item); // success, 100 (product) + 3 (fee) = 103
$user->balance; // 0

Minimal Taxing

Add interface MinimalTaxable (or MaximalTaxable) in class Item.

use Zotel\Wallet\Traits\HasWallet;
use Zotel\Wallet\Interfaces\Customer;
use Zotel\Wallet\Interfaces\MinimalTaxable;
use Zotel\Wallet\Interfaces\ProductInterface;

class Item extends Model implements ProductInterface, MinimalTaxable
{
    use HasWallet;

    public function getAmountProduct(Customer $customer): int|string
    {
        return 100;
    }

    public function getMetaProduct(): ?array
    {
        return [
            'title' => $this->title, 
            'description' => 'Purchase of Product #' . $this->id,
        ];
    }

    public function getFeePercent()
    {
        return 0.03; // 3%    
    }
    
    public function getMinimalFee()
    {
        return 5; // 3%, minimum 5    
    }
}

Successfully

Find the user and check the balance.

$user = User::first();
$user->balance; // 105

Find the goods and check the cost.

$item = Item::first();
$item->getAmountProduct($user); // 100

The user can buy a product, buy...

$user->pay($item); // success, 100 (product) + 5 (minimal fee) = 105
$user->balance; // 0

Failed

Find the user and check the balance.

$user = User::first();
$user->balance; // 103

Find the goods and check the cost.

$item = Item::first();
$item->getAmountProduct($user); // 100

The user can buy a product, buy...

$user->safePay($item); // failed, 100 (product) + 5 (minimal fee) = 105
$user->balance; // 103

It's simple!

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle