You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.0 KiB
119 lines
4.0 KiB
<?php
|
|
|
|
namespace App\CentralLogics;
|
|
|
|
use App\Models\BusinessSetting;
|
|
use App\Models\LoyaltyPointTransaction;
|
|
use App\Models\User;
|
|
use App\Models\WalletTransaction;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class CustomerLogic{
|
|
public static function create_wallet_transaction($user_id, float $amount, $transaction_type, $referance)
|
|
{
|
|
if(BusinessSetting::where('key','wallet_status')->first()->value != 1) return false;
|
|
|
|
$user = User::find($user_id);
|
|
$current_balance = $user->wallet_balance;
|
|
|
|
$wallet_transaction = new WalletTransaction();
|
|
$wallet_transaction->user_id = $user->id;
|
|
$wallet_transaction->transaction_id = \Str::uuid();
|
|
$wallet_transaction->reference = $referance;
|
|
$wallet_transaction->transaction_type = $transaction_type;
|
|
|
|
$debit = 0.0;
|
|
$credit = 0.0;
|
|
|
|
if(in_array($transaction_type, ['add_fund_by_admin','add_fund','order_refund','loyalty_point', 'referrer']))
|
|
{
|
|
$credit = $amount;
|
|
if($transaction_type == 'add_fund')
|
|
{
|
|
$wallet_transaction->admin_bonus = $amount*BusinessSetting::where('key','wallet_add_fund_bonus')->first()->value/100;
|
|
}
|
|
else if($transaction_type == 'loyalty_point')
|
|
{
|
|
$credit = (int)($amount / BusinessSetting::where('key','loyalty_point_exchange_rate')->first()->value);
|
|
}
|
|
}
|
|
else if($transaction_type == 'order_place')
|
|
{
|
|
$debit = $amount;
|
|
}
|
|
|
|
$wallet_transaction->credit = $credit;
|
|
$wallet_transaction->debit = $debit;
|
|
$wallet_transaction->balance = $current_balance + $credit - $debit;
|
|
$wallet_transaction->created_at = now();
|
|
$wallet_transaction->updated_at = now();
|
|
$user->wallet_balance = $current_balance + $credit - $debit;
|
|
|
|
try{
|
|
DB::beginTransaction();
|
|
$user->save();
|
|
$wallet_transaction->save();
|
|
DB::commit();
|
|
if(in_array($transaction_type, ['loyalty_point','order_place','add_fund_by_admin', 'referrer'])) return $wallet_transaction;
|
|
return true;
|
|
}catch(\Exception $ex)
|
|
{
|
|
info($ex);
|
|
DB::rollback();
|
|
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function create_loyalty_point_transaction($user_id, $referance, $amount, $transaction_type)
|
|
{
|
|
$settings = array_column(BusinessSetting::whereIn('key',['loyalty_point_status','loyalty_point_exchange_rate','loyalty_point_item_purchase_point'])->get()->toArray(), 'value','key');
|
|
if($settings['loyalty_point_status'] != 1)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
$credit = 0;
|
|
$debit = 0;
|
|
$user = User::find($user_id);
|
|
|
|
$loyalty_point_transaction = new LoyaltyPointTransaction();
|
|
$loyalty_point_transaction->user_id = $user->id;
|
|
$loyalty_point_transaction->transaction_id = \Str::uuid();
|
|
$loyalty_point_transaction->reference = $referance;
|
|
$loyalty_point_transaction->transaction_type = $transaction_type;
|
|
|
|
if($transaction_type=='order_place')
|
|
{
|
|
$credit = (int)($amount * $settings['loyalty_point_item_purchase_point']/100);
|
|
}
|
|
else if($transaction_type=='point_to_wallet')
|
|
{
|
|
$debit = $amount;
|
|
}
|
|
|
|
$current_balance = $user->loyalty_point + $credit - $debit;
|
|
$loyalty_point_transaction->balance = $current_balance;
|
|
$loyalty_point_transaction->credit = $credit;
|
|
$loyalty_point_transaction->debit = $debit;
|
|
$loyalty_point_transaction->created_at = now();
|
|
$loyalty_point_transaction->updated_at = now();
|
|
$user->loyalty_point = $current_balance;
|
|
|
|
try{
|
|
DB::beginTransaction();
|
|
$user->save();
|
|
$loyalty_point_transaction->save();
|
|
DB::commit();
|
|
return true;
|
|
}catch(\Exception $ex)
|
|
{
|
|
info($ex);
|
|
DB::rollback();
|
|
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|