mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-04 23:14:35 -04:00
Bank transaction rules
This commit is contained in:
parent
7150fdf66c
commit
6ef21be16c
@ -30,6 +30,7 @@ use App\Models\BankTransactionRule;
|
|||||||
use App\Repositories\BankTransactionRepository;
|
use App\Repositories\BankTransactionRepository;
|
||||||
use App\Repositories\BankTransactionRuleRepository;
|
use App\Repositories\BankTransactionRuleRepository;
|
||||||
use App\Services\Bank\BankMatchingService;
|
use App\Services\Bank\BankMatchingService;
|
||||||
|
use App\Transformers\BankTransactionRuleTransformer;
|
||||||
use App\Transformers\BankTransactionTransformer;
|
use App\Transformers\BankTransactionTransformer;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@ -42,7 +43,7 @@ class BankTransactionRuleController extends BaseController
|
|||||||
|
|
||||||
protected $entity_type = BankTransactionRule::class;
|
protected $entity_type = BankTransactionRule::class;
|
||||||
|
|
||||||
protected $entity_transformer = BankTransactionTransformer::class;
|
protected $entity_transformer = BankTransactionRuleTransformer::class;
|
||||||
|
|
||||||
protected $bank_transaction_repo;
|
protected $bank_transaction_repo;
|
||||||
|
|
||||||
|
31
app/Policies/BankTransactionRulePolicy.php
Normal file
31
app/Policies/BankTransactionRulePolicy.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BankTransactionPolicy.
|
||||||
|
*/
|
||||||
|
class BankTransactionRulePolicy extends EntityPolicy
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Checks if the user has create permissions.
|
||||||
|
*
|
||||||
|
* @param User $user
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function create(User $user) : bool
|
||||||
|
{
|
||||||
|
return $user->isAdmin();
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@ use App\Models\Activity;
|
|||||||
use App\Models\Bank;
|
use App\Models\Bank;
|
||||||
use App\Models\BankIntegration;
|
use App\Models\BankIntegration;
|
||||||
use App\Models\BankTransaction;
|
use App\Models\BankTransaction;
|
||||||
|
use App\Models\BankTransactionRule;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\CompanyGateway;
|
use App\Models\CompanyGateway;
|
||||||
@ -45,6 +46,7 @@ use App\Models\Webhook;
|
|||||||
use App\Policies\ActivityPolicy;
|
use App\Policies\ActivityPolicy;
|
||||||
use App\Policies\BankIntegrationPolicy;
|
use App\Policies\BankIntegrationPolicy;
|
||||||
use App\Policies\BankTransactionPolicy;
|
use App\Policies\BankTransactionPolicy;
|
||||||
|
use App\Policies\BankTransactionRulePolicy;
|
||||||
use App\Policies\ClientPolicy;
|
use App\Policies\ClientPolicy;
|
||||||
use App\Policies\CompanyGatewayPolicy;
|
use App\Policies\CompanyGatewayPolicy;
|
||||||
use App\Policies\CompanyPolicy;
|
use App\Policies\CompanyPolicy;
|
||||||
@ -86,6 +88,7 @@ class AuthServiceProvider extends ServiceProvider
|
|||||||
Activity::class => ActivityPolicy::class,
|
Activity::class => ActivityPolicy::class,
|
||||||
BankIntegration::class => BankIntegrationPolicy::class,
|
BankIntegration::class => BankIntegrationPolicy::class,
|
||||||
BankTransaction::class => BankTransactionPolicy::class,
|
BankTransaction::class => BankTransactionPolicy::class,
|
||||||
|
BankTransactionRule::class => BankTransactionRulePolicy::class,
|
||||||
Client::class => ClientPolicy::class,
|
Client::class => ClientPolicy::class,
|
||||||
Company::class => CompanyPolicy::class,
|
Company::class => CompanyPolicy::class,
|
||||||
CompanyToken::class => CompanyTokenPolicy::class,
|
CompanyToken::class => CompanyTokenPolicy::class,
|
||||||
|
@ -28,7 +28,7 @@ class BankTransactionRuleRepository extends BaseRepository
|
|||||||
|
|
||||||
$bank_transaction_rule->save();
|
$bank_transaction_rule->save();
|
||||||
|
|
||||||
return $bank_transaction_rule
|
return $bank_transaction_rule;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
31
database/factories/BankTransactionRuleFactory.php
Normal file
31
database/factories/BankTransactionRuleFactory.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
|
use App\Models\Account;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class BankTransactionRuleFactory extends Factory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Define the model's default state.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function definition()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' =>$this->faker->name(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -14,9 +14,10 @@ use App\Http\Controllers\AccountController;
|
|||||||
use App\Http\Controllers\ActivityController;
|
use App\Http\Controllers\ActivityController;
|
||||||
use App\Http\Controllers\Auth\ForgotPasswordController;
|
use App\Http\Controllers\Auth\ForgotPasswordController;
|
||||||
use App\Http\Controllers\Auth\LoginController;
|
use App\Http\Controllers\Auth\LoginController;
|
||||||
use App\Http\Controllers\Bank\YodleeController;
|
|
||||||
use App\Http\Controllers\BankIntegrationController;
|
use App\Http\Controllers\BankIntegrationController;
|
||||||
use App\Http\Controllers\BankTransactionController;
|
use App\Http\Controllers\BankTransactionController;
|
||||||
|
use App\Http\Controllers\BankTransactionRuleController;
|
||||||
|
use App\Http\Controllers\Bank\YodleeController;
|
||||||
use App\Http\Controllers\BaseController;
|
use App\Http\Controllers\BaseController;
|
||||||
use App\Http\Controllers\ChartController;
|
use App\Http\Controllers\ChartController;
|
||||||
use App\Http\Controllers\ClientController;
|
use App\Http\Controllers\ClientController;
|
||||||
@ -119,6 +120,9 @@ Route::group(['middleware' => ['throttle:300,1', 'api_db', 'token_auth', 'locale
|
|||||||
Route::post('bank_transactions/bulk', [BankTransactionController::class, 'bulk'])->name('bank_transactions.bulk');
|
Route::post('bank_transactions/bulk', [BankTransactionController::class, 'bulk'])->name('bank_transactions.bulk');
|
||||||
Route::post('bank_transactions/match', [BankTransactionController::class, 'match'])->name('bank_transactions.match');
|
Route::post('bank_transactions/match', [BankTransactionController::class, 'match'])->name('bank_transactions.match');
|
||||||
|
|
||||||
|
Route::resource('bank_transaction_rules', BankTransactionRuleController::class); // name = (clients. index / create / show / update / destroy / edit
|
||||||
|
Route::post('bank_transaction_rules/bulk', [BankTransactionRuleController::class, 'bulk'])->name('bank_transaction_rules.bulk');
|
||||||
|
|
||||||
Route::post('check_subdomain', [SubdomainController::class, 'index'])->name('check_subdomain');
|
Route::post('check_subdomain', [SubdomainController::class, 'index'])->name('check_subdomain');
|
||||||
Route::get('ping', [PingController::class, 'index'])->name('ping');
|
Route::get('ping', [PingController::class, 'index'])->name('ping');
|
||||||
Route::get('health_check', [PingController::class, 'health'])->name('health_check');
|
Route::get('health_check', [PingController::class, 'health'])->name('health_check');
|
||||||
|
102
tests/Feature/BankTransactionRuleApiTest.php
Normal file
102
tests/Feature/BankTransactionRuleApiTest.php
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use Illuminate\Support\Facades\Session;
|
||||||
|
use Illuminate\Validation\ValidationException;
|
||||||
|
use Tests\MockAccountData;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @covers App\Http\Controllers\BankTransactionRuleController
|
||||||
|
*/
|
||||||
|
class BankTransactionRuleApiTest extends TestCase
|
||||||
|
{
|
||||||
|
use MakesHash;
|
||||||
|
use DatabaseTransactions;
|
||||||
|
use MockAccountData;
|
||||||
|
|
||||||
|
protected function setUp() :void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->makeTestData();
|
||||||
|
|
||||||
|
Session::start();
|
||||||
|
|
||||||
|
$this->faker = \Faker\Factory::create();
|
||||||
|
|
||||||
|
Model::reguard();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBankTransactionRuleGet()
|
||||||
|
{
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
|
'X-API-TOKEN' => $this->token,
|
||||||
|
])->get('/api/v1/bank_transaction_rules/'.$this->encodePrimaryKey($this->bank_transaction_rule->id));
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBankTransactionRuleArchived()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)],
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
|
'X-API-TOKEN' => $this->token,
|
||||||
|
])->post('/api/v1/bank_transaction_rules/bulk?action=archive', $data);
|
||||||
|
|
||||||
|
$arr = $response->json();
|
||||||
|
|
||||||
|
$this->assertNotNull($arr['data'][0]['archived_at']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBankTransactionRuleRestored()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)],
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
|
'X-API-TOKEN' => $this->token,
|
||||||
|
])->post('/api/v1/bank_transaction_rules/bulk?action=restore', $data);
|
||||||
|
|
||||||
|
$arr = $response->json();
|
||||||
|
|
||||||
|
$this->assertEquals(0, $arr['data'][0]['archived_at']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBankTransactionRuleDeleted()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'ids' => [$this->encodePrimaryKey($this->bank_transaction_rule->id)],
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
|
'X-API-TOKEN' => $this->token,
|
||||||
|
])->post('/api/v1/bank_transaction_rules/bulk?action=delete', $data);
|
||||||
|
|
||||||
|
$arr = $response->json();
|
||||||
|
|
||||||
|
$this->assertTrue($arr['data'][0]['is_deleted']);
|
||||||
|
}
|
||||||
|
}
|
@ -26,6 +26,7 @@ use App\Jobs\Company\CreateCompanyTaskStatuses;
|
|||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
use App\Models\BankIntegration;
|
use App\Models\BankIntegration;
|
||||||
use App\Models\BankTransaction;
|
use App\Models\BankTransaction;
|
||||||
|
use App\Models\BankTransactionRule;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
use App\Models\ClientContact;
|
use App\Models\ClientContact;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
@ -153,6 +154,11 @@ trait MockAccountData
|
|||||||
*/
|
*/
|
||||||
public $bank_transaction;
|
public $bank_transaction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var
|
||||||
|
*/
|
||||||
|
public $bank_transaction_rule;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var
|
* @var
|
||||||
*/
|
*/
|
||||||
@ -572,6 +578,11 @@ trait MockAccountData
|
|||||||
'bank_integration_id' => $this->bank_integration->id,
|
'bank_integration_id' => $this->bank_integration->id,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->bank_transaction_rule = BankTransactionRule::factory()->create([
|
||||||
|
'user_id' => $user_id,
|
||||||
|
'company_id' => $this->company->id,
|
||||||
|
]);
|
||||||
|
|
||||||
$invitations = CreditInvitation::whereCompanyId($this->credit->company_id)
|
$invitations = CreditInvitation::whereCompanyId($this->credit->company_id)
|
||||||
->whereCreditId($this->credit->id);
|
->whereCreditId($this->credit->id);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user