| Path : /proc/self/root/var/www/html/mini-moneyexchange/app/Models/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : //proc/self/root/var/www/html/mini-moneyexchange/app/Models/Currency.php |
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;
class Currency extends Model
{
use HasFactory, Notifiable, SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'user_id',
'is_main_currency',
'decimal_precision',
'flage',
'sample_money',
'currency_code',
'child_currency_id',
'min_exchange_amount'
];
public function user()
{
return $this->belongsTo(User::class);
}
public function exchangeFromCurrencies()
{
return $this->hasMany(MoneyExchangeList::class,'exchange_from_currency_id', 'id');
}
public function bankAccounts()
{
return $this->hasMany(BankAccount::class);
}
public function getCashAmount($user_id){
return BankAccount::where('responsible_by_user_id',$user_id)->where('currency_id',$this->id)->where('is_bank',false)->orderBy('id','desc')->first();
}
public function exchangeToCurrencies()
{
return $this->hasMany(MoneyExchangeList::class,'exchange_to_currency_id', 'id');
}
// public function totalCashIn($start_date, $end_date, $user_id=null, $bank_account_id=null)
// {
// $exchangeListIds = $this->exchangeFromCurrencies()->pluck('id');
// $datas = Transaction::whereBetween('created_at',[$start_date,$end_date])->whereIn('money_exchange_list_id', $exchangeListIds);
// if($bank_account_id){
// $datas->where('bank_account_id',$bank_account_id);
// }
// if($user_id){
// $datas->where('user_id',$user_id);
// }
// return $datas->sum('amount');
// }
public function startBalance($date, $is_bank, $user_id=null, $bank_account_id=null)
{
$bank_account_ids = $this->bankAccounts()->pluck('id');
$datas = BankAccountTransaction::whereDate('created_at','<',$date)->whereIn('bank_account_id', $bank_account_ids);
// dd($is_bank);
if($is_bank!=null){
$datas->whereHas('bankAccount', function($query) use ($is_bank){
$query->where('bank_accounts.is_bank', $is_bank);
});
}
if($bank_account_id){
$datas->where('bank_account_id',$bank_account_id);
}
if($user_id){
$datas->where('user_id',$user_id);
}
$credit_after_transaction = 0;
$datas->orderBy('created_at','desc');
$data=[];
foreach($bank_account_ids as $index=>$baid){
$temp = Clone $datas;
$data = $temp->where('bank_account_id',$baid)->first();
$credit_after_transaction = $credit_after_transaction+ ($data->credit_after_transaction??0);
// unset($data);
// unset($temp);
}
return $credit_after_transaction;
}
public function totalCashIn($start_date, $end_date, $is_bank, $user_id=null, $bank_account_id=null, $is_internal=null)
{
$bank_account_ids = $this->bankAccounts()->pluck('id');
$datas = BankAccountTransaction::whereBetween('created_at',[$start_date,$end_date])->whereIn('bank_account_id', $bank_account_ids)->where('transaction_type','in');
if($is_internal==true){
$datas->where('transaction_id',null);
}
else{
$datas->where('transaction_id','<>',null);
}
if($is_bank!=null){
$datas->whereHas('bankAccount', function($query) use ($is_bank){
$query->where('bank_accounts.is_bank', $is_bank);
});
}
if($bank_account_id){
$datas->where('bank_account_id',$bank_account_id);
}
if($user_id){
$datas->whereHas('bankAccount', function($query) use($user_id){
$query->where('bank_accounts.responsible_by_user_id', $user_id);
});
// $datas->where('user_id',$user_id);
}
return $datas->sum('amount');
}
// public function totalCashOut($start_date, $end_date, $user_id=null, $bank_account_id=null)
// {
// $exchangeListIds = $this->exchangeToCurrencies()->pluck('id');
// $datas = Transaction::whereBetween('created_at',[$start_date,$end_date])->whereIn('money_exchange_list_id', $exchangeListIds);
// if($bank_account_id) {
// $datas->where('bank_account_id',$bank_account_id);
// }
// if($user_id) {
// $datas->where('user_id',$user_id);
// }
// return $datas->sum('amount_after_exchange');
// }
public function totalCashOut($start_date, $end_date, $is_bank, $user_id=null, $bank_account_id=null, $is_internal=null)
{
$bank_account_ids = $this->bankAccounts()->pluck('id');
$datas = BankAccountTransaction::whereBetween('created_at',[$start_date,$end_date])->whereIn('bank_account_id', $bank_account_ids)->where('transaction_type','out');
if($is_internal==true){
$datas->where('transaction_id',null);
}
else{
$datas->where('transaction_id','<>',null);
}
if($is_bank!=null){
$datas->whereHas('bankAccount', function($query) use ($is_bank){
$query->where('bank_accounts.is_bank', $is_bank);
});
}
if($bank_account_id){
$datas->where('bank_account_id',$bank_account_id);
}
if($user_id){
// $datas->where('user_id',$user_id);
$datas->whereHas('bankAccount', function($query) use($user_id){
$query->where('bank_accounts.responsible_by_user_id', $user_id);
});
}
return $datas->sum('amount');
}
public function totalFee($start_date, $end_date, $is_bank, $user_id=null, $bank_account_id=null)
{
$exchangeListIds = $this->exchangeFromCurrencies()->pluck('id');
$datas = Transaction::whereBetween('created_at',[$start_date,$end_date])->whereIn('money_exchange_list_id', $exchangeListIds);
if($is_bank!=null){
$datas->whereHas('bankAccount', function($query) use ($is_bank){
$query->where('bank_accounts.is_bank', $is_bank);
});
}
if($bank_account_id){
$datas->where('bank_account_id',$bank_account_id);
}
if($user_id){
$datas->where('user_id',$user_id);
}
return $datas->sum('fee');
}
public function toMainCurrency($amount) {
$mainCurrency = Currency::where('is_main_currency',true)->first();
if($this->id!=($mainCurrency->id??0)) {
$moneyExchangList =MoneyExchangeList::where('exchange_from_currency_id',$this->id)->where('exchange_to_currency_id',$mainCurrency->id)->firstOrFail();
if($moneyExchangList->calculation=='x') {
return $amount*$moneyExchangList->current_rate;
}
else {
return $amount/$moneyExchangList->current_rate;
}
}
else {
return $amount;
}
}
public function transfers()
{
return $this->hasMany(Transfer::class);
}
}