diff --git a/app/Models/BankTransaction.php b/app/Models/BankTransaction.php index 043198166764..c99fa50857cd 100644 --- a/app/Models/BankTransaction.php +++ b/app/Models/BankTransaction.php @@ -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() diff --git a/app/Transformers/BankTransactionTransformer.php b/app/Transformers/BankTransactionTransformer.php index 8efad08f8dc3..58ad829752e4 100644 --- a/app/Transformers/BankTransactionTransformer.php +++ b/app/Transformers/BankTransactionTransformer.php @@ -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); + } + } diff --git a/database/migrations/2022_08_05_023357_bank_integration.php b/database/migrations/2022_08_05_023357_bank_integration.php index 99fba3eeef6a..3677a966269f 100644 --- a/database/migrations/2022_08_05_023357_bank_integration.php +++ b/database/migrations/2022_08_05_023357_bank_integration.php @@ -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); diff --git a/tests/Unit/CompareCollectionTest.php b/tests/Unit/CompareCollectionTest.php index f699b2c002fc..d51f55b606b4 100644 --- a/tests/Unit/CompareCollectionTest.php +++ b/tests/Unit/CompareCollectionTest.php @@ -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());