Import/Export for Transfers
This commit is contained in:
		
							
								
								
									
										118
									
								
								app/Imports/Banking/Transfers.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								app/Imports/Banking/Transfers.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Imports\Banking;
 | 
			
		||||
 | 
			
		||||
use App\Abstracts\Import;
 | 
			
		||||
use App\Models\Banking\Transaction;
 | 
			
		||||
use App\Models\Banking\Transfer as Model;
 | 
			
		||||
use App\Models\Setting\Category;
 | 
			
		||||
use App\Traits\Currencies;
 | 
			
		||||
 | 
			
		||||
class Transfers extends Import
 | 
			
		||||
{
 | 
			
		||||
    use Currencies;
 | 
			
		||||
 | 
			
		||||
    public function model(array $row)
 | 
			
		||||
    {
 | 
			
		||||
        return new Model($row);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function map($row): array
 | 
			
		||||
    {
 | 
			
		||||
        $row = parent::map($row);
 | 
			
		||||
 | 
			
		||||
        $row['from_account_id'] = $this->getFromAccountId($row);
 | 
			
		||||
        $row['to_account_id'] = $this->getToAccountId($row);
 | 
			
		||||
        $row['expense_transaction_id'] = $this->getExpenseTransactionId($row);
 | 
			
		||||
        $row['income_transaction_id'] = $this->getIncomeTransactionId($row);
 | 
			
		||||
 | 
			
		||||
        return $row;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'from_account_id' => 'required|integer',
 | 
			
		||||
            'from_currency_code' => 'required|string|currency',
 | 
			
		||||
            'from_currency_rate' => 'required',
 | 
			
		||||
            'to_account_id' => 'required|integer',
 | 
			
		||||
            'to_currency_code' => 'required|string|currency',
 | 
			
		||||
            'to_currency_rate' => 'required',
 | 
			
		||||
            'amount' => 'required|amount',
 | 
			
		||||
            'transferred_at' => 'required|date_format:Y-m-d',
 | 
			
		||||
            'payment_method' => 'required|string',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getExpenseTransactionId($row)
 | 
			
		||||
    {
 | 
			
		||||
        $expense_transaction = Transaction::create([
 | 
			
		||||
           'company_id'     => session('company_id'),
 | 
			
		||||
           'type'           => 'expense',
 | 
			
		||||
           'account_id'     => $row['from_account_id'],
 | 
			
		||||
           'paid_at'        => $row['transferred_at'],
 | 
			
		||||
           'currency_code'  => $row['from_currency_code'],
 | 
			
		||||
           'currency_rate'  => $row['from_currency_rate'],
 | 
			
		||||
           'amount'         => $row['amount'],
 | 
			
		||||
           'contact_id'     => 0,
 | 
			
		||||
           'description'    => $row['description'],
 | 
			
		||||
           'category_id'    => Category::transfer(), // Transfer Category ID
 | 
			
		||||
           'payment_method' => $row['payment_method'],
 | 
			
		||||
           'reference'      => $row['reference'],
 | 
			
		||||
       ]);
 | 
			
		||||
 | 
			
		||||
        return $expense_transaction->id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getIncomeTransactionId($row)
 | 
			
		||||
    {
 | 
			
		||||
        $amount = $row['amount'];
 | 
			
		||||
        // Convert amount if not same currency
 | 
			
		||||
        if ($row['from_currency_code'] !== $row['to_currency_code']) {
 | 
			
		||||
            $amount = $this->convertBetween(
 | 
			
		||||
                $amount,
 | 
			
		||||
                $row['from_currency_code'],
 | 
			
		||||
                $row['from_currency_rate'],
 | 
			
		||||
                $row['to_currency_code'],
 | 
			
		||||
                $row['to_currency_rate']
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $income_transaction = Transaction::create([
 | 
			
		||||
          'company_id' => session('company_id'),
 | 
			
		||||
          'type' => 'income',
 | 
			
		||||
          'account_id' => $row['to_account_id'],
 | 
			
		||||
          'paid_at' => $row['transferred_at'],
 | 
			
		||||
          'currency_code' => $row['to_currency_code'],
 | 
			
		||||
          'currency_rate' => $row['to_currency_rate'],
 | 
			
		||||
          'amount' => $amount,
 | 
			
		||||
          'contact_id' => 0,
 | 
			
		||||
          'description' => $row['description'],
 | 
			
		||||
          'category_id' => Category::transfer(), // Transfer Category ID
 | 
			
		||||
          'payment_method' => $row['payment_method'],
 | 
			
		||||
          'reference' => $row['reference'],
 | 
			
		||||
      ]);
 | 
			
		||||
 | 
			
		||||
        return $income_transaction->id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getFromAccountId($row)
 | 
			
		||||
    {
 | 
			
		||||
        $row['account_id'] = $row['from_account_id'] ?? null;
 | 
			
		||||
        $row['account_name'] = $row['from_account_name'] ?? null;
 | 
			
		||||
        $row['account_number'] = $row['from_account_number'] ?? null;
 | 
			
		||||
        $row['currency_code'] = $row['from_currency_code'] ?? null;
 | 
			
		||||
 | 
			
		||||
        return $this->getAccountId($row);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getToAccountId($row)
 | 
			
		||||
    {
 | 
			
		||||
        $row['account_id'] = $row['to_account_id'] ?? null;
 | 
			
		||||
        $row['account_name'] = $row['to_account_name'] ?? null;
 | 
			
		||||
        $row['account_number'] = $row['to_account_number'] ?? null;
 | 
			
		||||
        $row['currency_code'] = $row['to_currency_code'] ?? null;
 | 
			
		||||
 | 
			
		||||
        return $this->getAccountId($row);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user