transactionUtil = $transactionUtil; $this->productUtil = $productUtil; $this->notificationUtil = $notificationUtil; } /** * Execute the console command. * * @return mixed */ public function handle() { try { ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); $businesses = Business::get(); DB::beginTransaction(); foreach ($businesses as $business) { if ($business->enable_rp != 1 || empty($business->rp_expiry_period)) { continue; } $transaction_date_to_be_expired = \Carbon::now(); if ($business->rp_expiry_type == 'month') { $transaction_date_to_be_expired = $transaction_date_to_be_expired->subMonths($business->rp_expiry_period); } elseif ($business->rp_expiry_type == 'year') { $transaction_date_to_be_expired = $transaction_date_to_be_expired->subYears($business->rp_expiry_period); } $transactions = Transaction::where('business_id', $business->id) ->where('type', 'sell') ->where('status', 'final') ->whereDate('transaction_date', '<=', $transaction_date_to_be_expired->format('Y-m-d')) ->whereNotNull('rp_earned') ->with(['contact']) ->select( DB::raw('SUM(COALESCE(rp_earned, 0)) as total_rp_expired'), 'contact_id' )->groupBy('contact_id') ->get(); foreach ($transactions as $transaction) { if (! empty($transaction->total_rp_expired) && $transaction->contact->total_rp_used < $transaction->total_rp_expired) { $contact = $transaction->contact; $diff = $transaction->total_rp_expired - $contact->total_rp_used; $contact->total_rp -= $diff; $contact->total_rp_expired = $transaction->total_rp_expired; $contact->save(); } } } DB::commit(); } catch (\Exception $e) { DB::rollBack(); \Log::emergency('File:'.$e->getFile().'Line:'.$e->getLine().'Message:'.$e->getMessage()); exit($e->getMessage()); } } }