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.
Add the CanPay trait and Customer interface to your User model.
The trait
CanPayalready inheritsHasWallet, reuse will cause an error.
use Zotel\Wallet\Traits\CanPay;
use Zotel\Wallet\Interfaces\Customer;
class User extends Model implements Customer
{
use CanPay;
}
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%
}
}
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
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
}
}
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
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!
How can I help you explore Laravel packages today?