belongsTo(Account::class); } public function checkout() { return $this->belongsTo(Checkout::class); } public function items() { return $this->hasMany(PaymentItem::class); } /* SCOPES */ /** * Search for a record * * @param $query * @param string $term * @return mixed */ public function scopeSearch($query,string $term) { // Build our where clause $query->where('id','like','%'.$term.'%'); return $query; } public function scopeUnapplied($query) { return $query ->select([DB::raw('payment_id AS id'),'payment_date','account_id','checkout_id','total_amt',DB::raw("SUM(alloc_amt) as allocated")]) ->join('payment_items',['payment_items.payment_id'=>'payments.id']) ->groupBy(['payment_id','payment_date','total_amt','account_id','checkout_id']) ->having(DB::raw("ROUND(total_amt-allocated,2)"),'>',self::threshold); } /* ATTRIBUTES */ public function getBalanceAttribute(): float { $balance = $this->getTotalAttribute()-$this->items->sum('alloc_amt'); return ($balance < self::threshold) ? 0 : $balance; } /** * Payment Local ID * * @return string */ public function getLIDattribute(): string { return sprintf('%06s',$this->id); } /** * Payment System ID * * @return string */ public function getSIDAttribute(): string { return sprintf('%02s-%04s#%s',$this->site_id,$this->account_id,$this->getLIDattribute()); } public function getTotalAttribute(): float { return sprintf('%3.2f',$this->total_amt); } }