Files
freeu-project/app/Services/Admin/CommissionService.php
2024-06-13 11:40:52 +05:30

83 lines
3.5 KiB
PHP

<?php
namespace App\Services\Admin;
use App\Models\Product;
use App\Models\MonthlyUpdateMaster;
use App\Models\ProductTrailCommission;
use App\Models\MonthlyUpdateMasterCommission;
use App\Models\MonthlyUpdateFractionalRealEstate;
use App\Models\MonthlyUpdateIndianFinancialAssets;
use App\Models\MonthlyUpdateAlternativeInvestmentFund;
class CommissionService
{
public function getTrailCommissions(){
return ProductTrailCommission::with('products')->orderBy('commission_earned')->oldest('commission_date')->get();
}
public function getMonthlyUpdate($id){
return MonthlyUpdateMaster::where(['products_id' => $id, 'holding_status' => 'Holding', 'status' => true])->get();
}
public function getProduct($id){
return Product::where('id', $id)->first();
}
public function getInvestmentValue($commission){
if ($commission->categories == 'Alternative Investment Fund') {
$investmentValue = MonthlyUpdateAlternativeInvestmentFund::where('custom_id', $commission->custom_id)->first()->getRawOriginal('commitment_amount');
} elseif ($commission->categories == 'Fractional Real Estate') {
$investmentValue = MonthlyUpdateFractionalRealEstate::where('custom_id', $commission->custom_id)->first()->getRawOriginal('investment_value');
} else {
$investmentValue = MonthlyUpdateIndianFinancialAssets::where('custom_id', $commission->custom_id)->first()->getRawOriginal('amount_invested');
}
return $investmentValue;
}
public function commissionCalculation($product,$investmentValue){
$trail_rate = 0;
if($product->return_type == 'Monthly')
{
$trail_rate += $product->trail_rate / 12 ;
}
if($product->return_type == 'Quarterly')
{
$trail_rate += $product->trail_rate / 4 ;
}
if($product->return_type == 'Half-Yearly')
{
$trail_rate += $product->trail_rate / 2 ;
}
if($product->return_type == 'Yearly')
{
$trail_rate += $product->trail_rate ;
}
$grossCommissionedEarned = ($investmentValue * $trail_rate) / 100;
$gst = ($grossCommissionedEarned * $product->gst) / 100;
$tds = ($grossCommissionedEarned * $product->tds) / 100;
return [
'gross-commission-earned' => $grossCommissionedEarned,
'gst' => $gst,
'tds' => $tds,
];
}
public function updateProductTrailCommission($id,$trailId){
return ProductTrailCommission::where(['products_id' => $id,'id' => $trailId])->update(['commission_earned' => 'Yes']);
}
public function storeMonthlyCommission($product,$commission,$investmentValue,$commissionCalculation){
return MonthlyUpdateMasterCommission::create([
'monthly_id' => $commission->id,
'total_investment_or_commitment_amount' => $investmentValue,
'applicable_rate' => $product->trail_rate,
'type_of_commission' => $product->commission_type =='Trail Commission'?'Trail Commission':"Hybrid Commission(Trail)",
// 'gross_commissioned_earned_inr' => $grossCommissionedEarned,
'gross_commissioned_earned_inr' => $commissionCalculation['gross-commission-earned'],
'gst' => $product->gst,
'tds' => $product->tds,
'net_commission_received' => $commissionCalculation['gross-commission-earned'] + $commissionCalculation['gst'] - $commissionCalculation['tds'],
]);
}
}