| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.ansachsongkhoe.net/app/ |
Upload File : |
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class AccountTransaction extends Model
{
use SoftDeletes;
protected $guarded = ['id'];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'operation_date',
'created_at',
'updated_at'
];
public function media()
{
return $this->morphMany(\App\Media::class, 'model');
}
public function transaction()
{
return $this->belongsTo(\App\Transaction::class, 'transaction_id');
}
/**
* Gives account transaction type from payment transaction type
* @param string $payment_transaction_type
* @return string
*/
public static function getAccountTransactionType($tansaction_type)
{
$account_transaction_types = [
'sell' => 'credit',
'purchase' => 'debit',
'expense' => 'debit',
'purchase_return' => 'credit',
'sell_return' => 'debit',
'payroll' => 'debit',
'expense_refund' => 'credit'
];
return $account_transaction_types[$tansaction_type];
}
/**
* Creates new account transaction
* @return obj
*/
public static function createAccountTransaction($data)
{
$transaction_data = [
'amount' => $data['amount'],
'account_id' => $data['account_id'],
'type' => $data['type'],
'sub_type' => !empty($data['sub_type']) ? $data['sub_type'] : null,
'operation_date' => !empty($data['operation_date']) ? $data['operation_date'] : \Carbon::now(),
'created_by' => $data['created_by'],
'transaction_id' => !empty($data['transaction_id']) ? $data['transaction_id'] : null,
'transaction_payment_id' => !empty($data['transaction_payment_id']) ? $data['transaction_payment_id'] : null,
'note' => !empty($data['note']) ? $data['note'] : null,
'transfer_transaction_id' => !empty($data['transfer_transaction_id']) ? $data['transfer_transaction_id'] : null,
];
$account_transaction = AccountTransaction::create($transaction_data);
return $account_transaction;
}
/**
* Updates transaction payment from transaction payment
* @param obj $transaction_payment
* @param array $inputs
* @param string $transaction_type
* @return string
*/
public static function updateAccountTransaction($transaction_payment, $transaction_type)
{
if (!empty($transaction_payment->account_id)) {
$account_transaction = AccountTransaction::where(
'transaction_payment_id',
$transaction_payment->id
)
->first();
if (!empty($account_transaction)) {
$account_transaction->amount = $transaction_payment->amount;
$account_transaction->account_id = $transaction_payment->account_id;
$account_transaction->save();
return $account_transaction;
} else {
$accnt_trans_data = [
'amount' => $transaction_payment->amount,
'account_id' => $transaction_payment->account_id,
'type' => self::getAccountTransactionType($transaction_type),
'operation_date' => $transaction_payment->paid_on,
'created_by' => $transaction_payment->created_by,
'transaction_id' => $transaction_payment->transaction_id,
'transaction_payment_id' => $transaction_payment->id
];
//If change return then set type as debit
if ($transaction_payment->transaction->type == 'sell' && $transaction_payment->is_return == 1) {
$accnt_trans_data['type'] = 'debit';
}
self::createAccountTransaction($accnt_trans_data);
}
}
}
public function transfer_transaction()
{
return $this->belongsTo(\App\AccountTransaction::class, 'transfer_transaction_id');
}
public function account()
{
return $this->belongsTo(\App\Account::class, 'account_id');
}
}