/
home
/
corsairdevelopme
/
public_html
/
amplivo-console
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Jobs\CalculateQBV; use App\Jobs\CalculateSponsorLevelByDateRange; use App\Jobs\CalculateWalletBalance; use App\Jobs\CalculatingUnilevelCommission; use App\Jobs\ConvertFlpToCsr; use App\Jobs\CustomerAcquisitionBonusByDateRange; use App\Jobs\CustomerLevelRecalculate; use App\Jobs\InfinityStarBonus; use App\Jobs\MatchingBonus; use App\Jobs\RecalculateTSV; use App\Jobs\StarRankCalculate; use App\Jobs\WeekRecalculateTsv; use App\Models\Wallet; use App\Models\WalletLog; use Carbon\Carbon; use Illuminate\Support\Facades\Bus; use Spatie\Activitylog\Models\Activity; class CompensationPlanCalculatorController extends Controller { public $calculationDay = 6; public static function getCalculationDayForDate($date) { $calculationDay = 6; $time = strtotime($date); $dayOfWeek = date('N', $time); $leftoverDays = $calculationDay > $dayOfWeek ? $calculationDay - $dayOfWeek : $calculationDay - $dayOfWeek + 7; return date('Y-m-d', strtotime(sprintf('%s +%d day', $date, $leftoverDays))); } public function runWholePayRun(Request $request) { $request->validate([ 'startdate' => 'required|date', 'enddate' => 'required|date', ]); session()->flash('success', 'Payrun calculation is in progress'); clearCache(); activity("payrun") ->withProperties(['payrunstart' => Carbon::now()->toDateTimeString()]) ->log('Full Pay Run ' . $request->startdate); $lastActivity = Activity::get()->last(); $lastActivity->subject_type = "Payrun"; $lastActivity->subject_id = 1; $lastActivity->save(); $startfrom = date('2018-12-01 00:00:01'); $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); $ls = Carbon::parse($request->enddate)->subMonth(); Bus::chain([ new CustomerLevelRecalculate(), new CalculateSponsorLevelByDateRange($startfrom, $to), new StarRankCalculate($ls, $to), new InfinityStarBonus($from, $to), new CalculatingUnilevelCommission($from, $to), new MatchingBonus($from, $to), new CustomerAcquisitionBonusByDateRange($from, $to), ])->dispatch(); return redirect()->back()->with(['success' => 'Payrun calculation is in progress']); } public function recalculateTsv() { RecalculateTSV::dispatch(); return redirect()->back()->with(['success' => 'TSV calculation is in progress']); } public function starRankCalculate(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); StarRankCalculate::dispatch($from, $to); return redirect()->back()->with(['success' => 'Star rank calculation is in progress']); } public function customerLevelRecalculate() { CustomerLevelRecalculate::dispatch(); return redirect()->back()->with(['success' => 'Customer level calculation is in progress']); } public function calculateSponsorLevelByDateRange(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); CalculateSponsorLevelByDateRange::dispatch($from, $to); return redirect()->back()->with(['success' => 'Sponsor level calculation is in progress']); } public function calculateQBV() { // Zero the QBV for all users. CalculateQBV::dispatch(); return redirect()->back()->with(['success' => 'QBV calculation is in progress']); } public function weekRecalculateTsv(Request $request) { WeekRecalculateTsv::dispatch($request->startdate); return redirect()->back()->with(['success' => 'Weekly TVS calculation is in progress']); } public function calculatingUnilevelCommission(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); CalculatingUnilevelCommission::dispatch($from, $to); return redirect()->back()->with(['success' => 'Uni level commission calculating is in progress']); } public function customerAcquisitionBonusByDateRange(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); CustomerAcquisitionBonusByDateRange::dispatch($from, $to); return redirect()->back()->with(['success' => 'Customer acquisition bonus calculation is in progress']); # code... } public function infinityStarBonus(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); InfinityStarBonus::dispatch($from, $to); return redirect()->back()->with(['success' => 'Infinity star bonus calculation is in progress']); } public function distributeBonus($user, $bonus, $wallets) { // For every wallet a new wallet_log entry is created. foreach ($wallets as $type => $parameters) { $action = $parameters[0]; $multiplier = $parameters[1]; $value = $bonus * $multiplier; $wid = Wallet::firstOrCreate([['type', $type], ['user_id', $user->id]]); WalletLog::create([ 'wallet_id' => $wid->id, 'value' => $value, 'action' => $action, ]); } } public function calculateWalletBalance() { CalculateWalletBalance::dispatch(); return redirect()->back()->with(['success' => 'Wallet balance calculate is in progress']); # code... } public function convertFlpCsr() { ConvertFlpToCsr::dispatch(); return redirect()->back()->with(['success' => 'Flp to csr calculation is in progress']); } public function matchingBonus(Request $request) { $from = date($request->startdate . ' 00:00:01'); $to = date($request->enddate . ' 23:59:59'); MatchingBonus::dispatch($from, $to); return redirect()->back()->with(['success' => 'Matching bonus calculation is in progress']); } }