ultimatepos/app/TransactionPayment.php

118 lines
3.2 KiB
PHP

<?php
namespace App;
use App\Events\TransactionPaymentDeleted;
use App\Events\TransactionPaymentUpdated;
use Illuminate\Database\Eloquent\Model;
class TransactionPayment extends Model
{
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = ['id'];
/**
* Get the phone record associated with the user.
*/
public function payment_account()
{
return $this->belongsTo(\App\Account::class, 'account_id');
}
/**
* Get the transaction related to this payment.
*/
public function transaction()
{
return $this->belongsTo(\App\Transaction::class, 'transaction_id');
}
/**
* Get the user.
*/
public function created_user()
{
return $this->belongsTo(\App\User::class, 'created_by');
}
/**
* Get child payments
*/
public function child_payments()
{
return $this->hasMany(\App\TransactionPayment::class, 'parent_id');
}
/**
* Retrieves documents path if exists
*/
public function getDocumentPathAttribute()
{
$path = ! empty($this->document) ? asset('/uploads/documents/'.$this->document) : null;
return $path;
}
/**
* Removes timestamp from document name
*/
public function getDocumentNameAttribute()
{
$document_name = ! empty(explode('_', $this->document, 2)[1]) ? explode('_', $this->document, 2)[1] : $this->document;
return $document_name;
}
public static function deletePayment($payment)
{
//Update parent payment if exists
if (! empty($payment->parent_id)) {
$parent_payment = TransactionPayment::find($payment->parent_id);
$parent_payment->amount -= $payment->amount;
if ($parent_payment->amount <= 0) {
$parent_payment->delete();
event(new TransactionPaymentDeleted($parent_payment));
} else {
$parent_payment->save();
//Add event to update parent payment account transaction
event(new TransactionPaymentUpdated($parent_payment, null));
}
}
$payment->delete();
$transactionUtil = new \App\Utils\TransactionUtil();
if (! empty($payment->transaction_id)) {
//update payment status
$transaction = $payment->load('transaction')->transaction;
$transaction_before = $transaction->replicate();
$payment_status = $transactionUtil->updatePaymentStatus($payment->transaction_id);
$transaction->payment_status = $payment_status;
$transactionUtil->activityLog($transaction, 'payment_edited', $transaction_before);
}
$log_properities = [
'id' => $payment->id,
'ref_no' => $payment->payment_ref_no,
];
$transactionUtil->activityLog($payment, 'payment_deleted', null, $log_properities);
//Add event to delete account transaction
event(new TransactionPaymentDeleted($payment));
}
public function denominations()
{
return $this->morphMany(\App\CashDenomination::class, 'model');
}
}