mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Refactor bank transactions
This commit is contained in:
parent
08802deeb1
commit
3aa0df508e
@ -11,11 +11,19 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class BankTransaction extends BaseModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
use MakesHash;
|
||||
|
||||
const STATUS_UNMATCHED = 1;
|
||||
|
||||
const STATUS_MATCHED = 2;
|
||||
|
||||
const STATUS_CONVERTED = 3;
|
||||
|
||||
protected $fillable = [
|
||||
];
|
||||
@ -23,6 +31,26 @@ class BankTransaction extends BaseModel
|
||||
protected $dates = [
|
||||
];
|
||||
|
||||
public function getInvoiceIds()
|
||||
{
|
||||
$collection = collect();
|
||||
|
||||
$invoices = explode(",", $this->invoice_ids);
|
||||
|
||||
if(count($invoices) >= 1)
|
||||
{
|
||||
|
||||
foreach($invoices as $invoice){
|
||||
|
||||
if(is_string($invoice) && strlen($invoice) > 1)
|
||||
$collection->push($this->decodePrimaryKey($invoice));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $collection;
|
||||
}
|
||||
|
||||
public function getEntityType()
|
||||
{
|
||||
return self::class;
|
||||
@ -33,9 +61,9 @@ class BankTransaction extends BaseModel
|
||||
return $this->belongsTo(Company::class);
|
||||
}
|
||||
|
||||
public function invoice()
|
||||
public function vendor()
|
||||
{
|
||||
return $this->belongsTo(Invoice::class);
|
||||
return $this->belongsTo(Vendor::class);
|
||||
}
|
||||
|
||||
public function expense()
|
||||
|
@ -16,6 +16,7 @@ use App\Models\BankTransaction;
|
||||
use App\Models\Company;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Invoice;
|
||||
use App\Transformers\VendorTransformer;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
|
||||
/**
|
||||
@ -37,8 +38,8 @@ class BankTransactionTransformer extends EntityTransformer
|
||||
protected $availableIncludes = [
|
||||
'company',
|
||||
'account',
|
||||
'invoice',
|
||||
'expense',
|
||||
'vendor',
|
||||
'bank_account',
|
||||
];
|
||||
|
||||
@ -56,16 +57,17 @@ class BankTransactionTransformer extends EntityTransformer
|
||||
'currency_code' => (string) $bank_transaction->currency_code ?: '',
|
||||
'account_type' => (string) $bank_transaction->account_type ?: '',
|
||||
'category_id' => (int) $bank_transaction->category_id,
|
||||
'ninja_category_id' => (int) $bank_transaction->ninja_category_id,
|
||||
'category_type' => (string) $bank_transaction->category_type ?: '',
|
||||
'date' => (string) $bank_transaction->date ?: '',
|
||||
'bank_account_id' => (int) $bank_transaction->bank_account_id,
|
||||
'status_id' => (int) $bank_transaction->status_id,
|
||||
'description' => (string) $bank_transaction->description ?: '',
|
||||
'base_type' => (string) $bank_transaction->base_type ?: '',
|
||||
'invoice_id' => (string) $this->encodePrimaryKey($bank_transaction->invoice_id) ?: '',
|
||||
'invoice_ids' => (string) $bank_transaction->invoice_ids ?: '',
|
||||
'expense_id'=> (string) $this->encodePrimaryKey($bank_transaction->expense_id) ?: '',
|
||||
'is_matched'=> (bool) $bank_transaction->is_matched,
|
||||
'vendor_id'=> (string) $this->encodePrimaryKey($bank_transaction->vendor_id) ?: '',
|
||||
'is_deleted' => (bool) $bank_transaction->is_deleted,
|
||||
'provisional_match' => (bool) $bank_transaction->provisional_match,
|
||||
'created_at' => (int) $bank_transaction->created_at,
|
||||
'updated_at' => (int) $bank_transaction->updated_at,
|
||||
'archived_at' => (int) $bank_transaction->deleted_at,
|
||||
@ -86,13 +88,6 @@ class BankTransactionTransformer extends EntityTransformer
|
||||
return $this->includeItem($bank_transaction->company, $transformer, Company::class);
|
||||
}
|
||||
|
||||
public function includeInvoice(BankTransaction $bank_transaction)
|
||||
{
|
||||
$transformer = new InvoiceTransformer($this->serializer);
|
||||
|
||||
return $this->includeItem($bank_transaction->invoice, $transformer, Invoice::class);
|
||||
}
|
||||
|
||||
public function includeExpense(BankTransaction $bank_transaction)
|
||||
{
|
||||
$transformer = new ExpenseTransformer($this->serializer);
|
||||
@ -100,4 +95,11 @@ class BankTransactionTransformer extends EntityTransformer
|
||||
return $this->includeItem($bank_transaction->expense, $transformer, Expense::class);
|
||||
}
|
||||
|
||||
public function includeVendor(BankTransaction $bank_transaction)
|
||||
{
|
||||
$transformer = new VendorTransformer($this->serializer);
|
||||
|
||||
return $this->includeItem($bank_transaction->vendor, $transformer, Vendor::class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,18 +56,19 @@ return new class extends Migration
|
||||
$table->unsignedInteger('user_id');
|
||||
$table->unsignedBigInteger('bank_integration_id');
|
||||
$table->unsignedBigInteger('transaction_id')->index();
|
||||
$table->decimal('amount', 20, 6);
|
||||
$table->string('currency_code');
|
||||
$table->string('account_type');
|
||||
$table->unsignedInteger('category_id');
|
||||
$table->decimal('amount', 20, 6)->default(0);
|
||||
$table->string('currency_code')->nullable();
|
||||
$table->string('account_type')->nullable();
|
||||
$table->unsignedInteger('category_id')->nullable();
|
||||
$table->unsignedInteger('ninja_category_id')->nullable();
|
||||
$table->string('category_type')->index();
|
||||
$table->date('date');
|
||||
$table->date('date')->nullable();
|
||||
$table->unsignedBigInteger('bank_account_id');
|
||||
$table->text('description');
|
||||
$table->unsignedInteger('invoice_id')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->text('invoice_ids')->default('');
|
||||
$table->unsignedInteger('expense_id')->nullable();
|
||||
$table->boolean('is_matched')->default(0);
|
||||
$table->boolean('provisional_match')->default(0);
|
||||
$table->unsignedInteger('vendor_id')->nullable();
|
||||
$table->unsignedInteger('status_id')->default(1); //unmatched / matched / converted
|
||||
$table->boolean('is_deleted')->default(0);
|
||||
|
||||
$table->timestamps(6);
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
@ -19,6 +20,8 @@ use Tests\TestCase;
|
||||
*/
|
||||
class CompareCollectionTest extends TestCase
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
protected function setUp() :void
|
||||
{
|
||||
parent::setUp();
|
||||
@ -42,6 +45,29 @@ class CompareCollectionTest extends TestCase
|
||||
$this->is_not_admin = false;
|
||||
}
|
||||
|
||||
public function testCollectionCreation()
|
||||
{
|
||||
$collection = collect();
|
||||
|
||||
$invoice_ids = '';
|
||||
|
||||
$invoices = explode(",", $invoice_ids);
|
||||
|
||||
if(count($invoices) >= 1)
|
||||
{
|
||||
|
||||
foreach($invoices as $invoice){
|
||||
|
||||
if(is_string($invoice) && strlen($invoice) > 1)
|
||||
$collection->push($this->decodePrimaryKey($invoice));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->assertEquals(0, $collection->count());
|
||||
|
||||
}
|
||||
|
||||
public function testCompareResultOfComparison()
|
||||
{
|
||||
$this->assertEquals(7, $this->map->count());
|
||||
|
Loading…
x
Reference in New Issue
Block a user