mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 05:04:35 -04:00
Refactor bank transactions
This commit is contained in:
parent
8300b01504
commit
dd414fc588
@ -550,7 +550,10 @@ class BankTransactionController extends BaseController
|
|||||||
|
|
||||||
MatchBankTransactions::dispatch(auth()->user()->company()->id, auth()->user()->company()->db, $request->all());
|
MatchBankTransactions::dispatch(auth()->user()->company()->id, auth()->user()->company()->db, $request->all());
|
||||||
|
|
||||||
return response()->json(['message' => 'Processing....'], 200);
|
$bt = (new MatchBankTransactions(auth()->user()->company()->id, auth()->user()->company()->db, $request->all()))->handle();
|
||||||
|
|
||||||
|
return $this->itemResponse($bt);
|
||||||
|
// return response()->json(['message' => 'Processing....'], 200);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +46,12 @@ class MatchBankTransactionRequest extends Request
|
|||||||
{
|
{
|
||||||
$input = $this->all();
|
$input = $this->all();
|
||||||
|
|
||||||
|
if(array_key_exists('id', $input))
|
||||||
|
$input['id'] = $this->decodePrimaryKey($input['id']);
|
||||||
|
|
||||||
|
if(array_key_exists('ninja_category_id', $input))
|
||||||
|
$input['ninja_category_id'] = $this->decodePrimaryKey($input['ninja_category_id']);
|
||||||
|
|
||||||
$input = $this->decodePrimaryKeys($input);
|
$input = $this->decodePrimaryKeys($input);
|
||||||
|
|
||||||
$this->replace($input);
|
$this->replace($input);
|
||||||
|
@ -37,6 +37,7 @@ use Illuminate\Queue\InteractsWithQueue;
|
|||||||
use Illuminate\Queue\Middleware\WithoutOverlapping;
|
use Illuminate\Queue\Middleware\WithoutOverlapping;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
class MatchBankTransactions implements ShouldQueue
|
class MatchBankTransactions implements ShouldQueue
|
||||||
{
|
{
|
||||||
@ -87,19 +88,23 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
$this->company = Company::find($this->company_id);
|
$this->company = Company::find($this->company_id);
|
||||||
|
|
||||||
$yodlee = new Yodlee($this->company->account->bank_integration_account_id);
|
$yodlee = new Yodlee($this->company->account->bank_integration_account_id);
|
||||||
|
|
||||||
|
$bank_categories = Cache::get('bank_categories');
|
||||||
|
|
||||||
$_categories = $yodlee->getTransactionCategories();
|
if(!$bank_categories){
|
||||||
|
$_categories = $yodlee->getTransactionCategories();
|
||||||
if($_categories)
|
|
||||||
$this->categories = collect($_categories->transactionCategory);
|
$this->categories = collect($_categories->transactionCategory);
|
||||||
|
|
||||||
foreach($this->input as $match)
|
|
||||||
{
|
|
||||||
if(array_key_exists('invoice_ids', $match) && strlen($match['invoice_ids']) > 1)
|
|
||||||
$this->matchInvoicePayment($match);
|
|
||||||
else
|
|
||||||
$this->matchExpense($match);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$this->categories = collect($bank_categories);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(array_key_exists('invoice_ids', $this->input) && strlen($this->input['invoice_ids']) > 1)
|
||||||
|
$this->matchInvoicePayment();
|
||||||
|
else
|
||||||
|
$this->matchExpense();
|
||||||
|
|
||||||
|
return $this->bt;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,15 +142,12 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function matchInvoicePayment(array $match) :void
|
private function matchInvoicePayment() :self
|
||||||
{
|
{
|
||||||
$this->bt = BankTransaction::find($match['id']);
|
$this->bt = BankTransaction::find($this->input['id']);
|
||||||
|
|
||||||
$_invoices = Invoice::withTrashed()->find($this->getInvoices($match['invoice_ids']));
|
$_invoices = Invoice::withTrashed()->find($this->getInvoices($this->input['invoice_ids']));
|
||||||
|
|
||||||
if(array_key_exists('amount', $match) && $match['amount'] > 0)
|
|
||||||
$amount = $match['amount'];
|
|
||||||
else
|
|
||||||
$amount = $this->bt->amount;
|
$amount = $this->bt->amount;
|
||||||
|
|
||||||
if($_invoices && $this->checkPayable($_invoices)){
|
if($_invoices && $this->checkPayable($_invoices)){
|
||||||
@ -154,12 +156,13 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function matchExpense(array $match) :void
|
private function matchExpense() :self
|
||||||
{
|
{
|
||||||
//if there is a category id, pull it from Yodlee and insert - or just reuse!!
|
//if there is a category id, pull it from Yodlee and insert - or just reuse!!
|
||||||
$this->bt = BankTransaction::find($match['id']);
|
$this->bt = BankTransaction::find($this->input['id']);
|
||||||
|
|
||||||
$expense = ExpenseFactory::create($this->bt->company_id, $this->bt->user_id);
|
$expense = ExpenseFactory::create($this->bt->company_id, $this->bt->user_id);
|
||||||
$expense->category_id = $this->resolveCategory();
|
$expense->category_id = $this->resolveCategory();
|
||||||
@ -170,6 +173,7 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
$expense->public_notes = $this->bt->description;
|
$expense->public_notes = $this->bt->description;
|
||||||
$expense->save();
|
$expense->save();
|
||||||
|
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createPayment($invoices, float $amount) :void
|
private function createPayment($invoices, float $amount) :void
|
||||||
@ -280,6 +284,9 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
|
|
||||||
private function resolveCategory() :?int
|
private function resolveCategory() :?int
|
||||||
{
|
{
|
||||||
|
if(array_key_exists('ninja_category_id', $this->input))
|
||||||
|
return $this->input['ninja_category_id'];
|
||||||
|
|
||||||
$category = $this->categories->firstWhere('highLevelCategoryId', $this->bt->category_id);
|
$category = $this->categories->firstWhere('highLevelCategoryId', $this->bt->category_id);
|
||||||
|
|
||||||
$ec = ExpenseCategory::where('company_id', $this->bt->company_id)->where('bank_category_id', $this->bt->category_id)->first();
|
$ec = ExpenseCategory::where('company_id', $this->bt->company_id)->where('bank_category_id', $this->bt->category_id)->first();
|
||||||
|
@ -38,7 +38,7 @@ class BankTransactionTest extends TestCase
|
|||||||
public function testMatchBankTransactionsValidationShouldFail()
|
public function testMatchBankTransactionsValidationShouldFail()
|
||||||
{
|
{
|
||||||
$data = [
|
$data = [
|
||||||
['bad_key' => 10],
|
'bad_key' => 10,
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = $this->withHeaders([
|
$response = $this->withHeaders([
|
||||||
@ -53,9 +53,12 @@ class BankTransactionTest extends TestCase
|
|||||||
public function testMatchBankTransactionValidationShouldPass()
|
public function testMatchBankTransactionValidationShouldPass()
|
||||||
{
|
{
|
||||||
$data = [
|
$data = [
|
||||||
['id' => 'Wpmbk5ezJn'],
|
'id' => $this->bank_transaction->hashed_id,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
nlog($this->bank_transaction->hashed_id);
|
||||||
|
|
||||||
|
|
||||||
$response = $this->withHeaders([
|
$response = $this->withHeaders([
|
||||||
'X-API-SECRET' => config('ninja.api_secret'),
|
'X-API-SECRET' => config('ninja.api_secret'),
|
||||||
'X-API-TOKEN' => $this->token,
|
'X-API-TOKEN' => $this->token,
|
||||||
|
@ -62,9 +62,7 @@ class YodleeApiTest extends TestCase
|
|||||||
|
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
[
|
'id' => $bt->id,
|
||||||
'id' => $bt->id,
|
|
||||||
]
|
|
||||||
];
|
];
|
||||||
|
|
||||||
MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
|
MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
|
||||||
@ -119,10 +117,8 @@ class YodleeApiTest extends TestCase
|
|||||||
$bt->save();
|
$bt->save();
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
[
|
'id' => $bt->id,
|
||||||
'id' => $bt->id,
|
'invoice_ids' => $invoice->hashed_id
|
||||||
'invoice_ids' => $invoice->hashed_id
|
|
||||||
]
|
|
||||||
];
|
];
|
||||||
|
|
||||||
MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
|
MatchBankTransactions::dispatchSync($this->company->id, $this->company->db, $data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user