83 lines
3.5 KiB
PHP
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'],
|
|
]);
|
|
}
|
|
} |