diff --git a/app/Http/Controllers/BankIntegrationController.php b/app/Http/Controllers/BankIntegrationController.php index 750505c24feb..774aa97057e8 100644 --- a/app/Http/Controllers/BankIntegrationController.php +++ b/app/Http/Controllers/BankIntegrationController.php @@ -24,7 +24,7 @@ use App\Http\Requests\BankIntegration\UpdateBankIntegrationRequest; use App\Jobs\Bank\ProcessBankTransactions; use App\Models\BankIntegration; use App\Repositories\BankIntegrationRepository; -use App\Services\Bank\BankService; +use App\Services\Bank\BankMatchingService; use App\Transformers\BankIntegrationTransformer; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; diff --git a/app/Http/Controllers/BankTransactionController.php b/app/Http/Controllers/BankTransactionController.php index 13fb7be803dd..901f1812a071 100644 --- a/app/Http/Controllers/BankTransactionController.php +++ b/app/Http/Controllers/BankTransactionController.php @@ -27,7 +27,7 @@ use App\Http\Requests\Import\PreImportRequest; use App\Jobs\Bank\MatchBankTransactions; use App\Models\BankTransaction; use App\Repositories\BankTransactionRepository; -use App\Services\Bank\BankService; +use App\Services\Bank\BankMatchingService; use App\Transformers\BankTransactionTransformer; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php index 14ec163292ca..bb366453c155 100644 --- a/app/Jobs/Bank/MatchBankTransactions.php +++ b/app/Jobs/Bank/MatchBankTransactions.php @@ -26,7 +26,7 @@ use App\Models\Currency; use App\Models\ExpenseCategory; use App\Models\Invoice; use App\Models\Payment; -use App\Services\Bank\BankService; +use App\Services\Bank\BankMatchingService; use App\Utils\Ninja; use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\MakesHash; diff --git a/app/Jobs/Bank/ProcessBankTransactions.php b/app/Jobs/Bank/ProcessBankTransactions.php index d213be664a7a..74d996f0fd14 100644 --- a/app/Jobs/Bank/ProcessBankTransactions.php +++ b/app/Jobs/Bank/ProcessBankTransactions.php @@ -16,7 +16,7 @@ use App\Libraries\MultiDB; use App\Models\BankIntegration; use App\Models\BankTransaction; use App\Models\Company; -use App\Services\Bank\BankService; +use App\Services\Bank\BankMatchingService; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -79,7 +79,7 @@ class ProcessBankTransactions implements ShouldQueue } while($this->stop_loop); - BankService::dispatch($this->company->id, $this->company->db); + BankMatchingService::dispatch($this->company->id, $this->company->db); } diff --git a/app/Models/BankTransaction.php b/app/Models/BankTransaction.php index 45ff86ecd2f8..7092da3f89b1 100644 --- a/app/Models/BankTransaction.php +++ b/app/Models/BankTransaction.php @@ -13,6 +13,7 @@ namespace App\Models; use App\Models\Filterable; use App\Models\Invoice; +use App\Services\Bank\BankService; use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\SoftDeletes; @@ -98,22 +99,9 @@ class BankTransaction extends BaseModel return $this->belongsTo(Account::class)->withTrashed(); } - - public function matchInvoiceNumber() + public function service() :BankService { - - if(strlen($this->description) > 1) - { - - $i = Invoice::where('company_id', $this->company_id) - ->whereIn('status_id', [1,2,3]) - ->where('is_deleted', 0) - ->where('number', 'LIKE', '%'.$this->description.'%') - ->first(); - - return $i ?: false; - } - - return false; + return new BankService($this); } + } \ No newline at end of file diff --git a/app/Repositories/BankTransactionRepository.php b/app/Repositories/BankTransactionRepository.php index ac53b4aee437..186f8c67ead8 100644 --- a/app/Repositories/BankTransactionRepository.php +++ b/app/Repositories/BankTransactionRepository.php @@ -31,7 +31,7 @@ class BankTransactionRepository extends BaseRepository $bank_transaction->save(); - if($bank_transaction->base_type == 'CREDIT' && $invoice = $bank_transaction->matchInvoiceNumber()) + if($bank_transaction->base_type == 'CREDIT' && $invoice = $bank_transaction->service()->matchInvoiceNumber()) { $bank_transaction->invoice_ids = $invoice->hashed_id; $bank_transaction->status_id = BankTransaction::STATUS_MATCHED; diff --git a/app/Services/Bank/BankMatchingService.php b/app/Services/Bank/BankMatchingService.php new file mode 100644 index 000000000000..b466a95cfcd8 --- /dev/null +++ b/app/Services/Bank/BankMatchingService.php @@ -0,0 +1,84 @@ +company_id = $company_id; + $this->db = $db; + } + + public function handle() + { + + MultiDB::setDb($this->db); + + $this->company = Company::find($this->company_id); + + $this->invoices = Invoice::where('company_id', $this->company->id) + ->whereIn('status_id', [1,2,3]) + ->where('is_deleted', 0) + ->get(); + + $this->match(); + } + + private function match() + { + + BankTransaction::where('company_id', $this->company->id) + ->where('status_id', BankTransaction::STATUS_UNMATCHED) + ->cursor() + ->each(function ($bt){ + + $invoice = $this->invoices->first(function ($value, $key) use ($bt){ + + return str_contains($bt->description, $value->number); + + }); + + if($invoice) + { + $bt->invoice_ids = $invoice->hashed_id; + $bt->status_id = BankTransaction::STATUS_MATCHED; + $bt->save(); + } + + }); + } + + +} diff --git a/app/Services/Bank/BankService.php b/app/Services/Bank/BankService.php index ad15ddd21352..7a7f50759191 100644 --- a/app/Services/Bank/BankService.php +++ b/app/Services/Bank/BankService.php @@ -11,74 +11,40 @@ namespace App\Services\Bank; -use App\Libraries\MultiDB; use App\Models\BankTransaction; -use App\Models\Company; use App\Models\Invoice; -use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Queue\SerializesModels; +use App\Services\Bank\ProcessBankRule; -class BankService implements ShouldQueue +class BankService { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - private $company_id; + public function __construct(public BankTransaction $bank_transaction) {} - private Company $company; - private $db; - - private $invoices; - - public $deleteWhenMissingModels = true; - - public function __construct($company_id, $db) - { - $this->company_id = $company_id; - $this->db = $db; - } - - public function handle() + public function matchInvoiceNumber() { - MultiDB::setDb($this->db); + if(strlen($this->bank_transaction->description) > 1) + { - $this->company = Company::find($this->company_id); + $i = Invoice::where('company_id', $this->bank_transaction->company_id) + ->whereIn('status_id', [1,2,3]) + ->where('is_deleted', 0) + ->where('number', 'LIKE', '%'.$this->bank_transaction->description.'%') + ->first(); - $this->invoices = Invoice::where('company_id', $this->company->id) - ->whereIn('status_id', [1,2,3]) - ->where('is_deleted', 0) - ->get(); + return $i ?: false; + } + + return false; - $this->match(); } - private function match() + public function processRule($rule) { + (new ProcessBankRule($this->bank_transaction, $rule))->run(); - BankTransaction::where('company_id', $this->company->id) - ->where('status_id', BankTransaction::STATUS_UNMATCHED) - ->cursor() - ->each(function ($bt){ - - $invoice = $this->invoices->first(function ($value, $key) use ($bt){ - - return str_contains($bt->description, $value->number); - - }); - - if($invoice) - { - $bt->invoice_ids = $invoice->hashed_id; - $bt->status_id = BankTransaction::STATUS_MATCHED; - $bt->save(); - } - - }); + return $this; } - -} +} \ No newline at end of file diff --git a/app/Services/Bank/ProcessBankRule.php b/app/Services/Bank/ProcessBankRule.php new file mode 100644 index 000000000000..ffeedbb1f1fe --- /dev/null +++ b/app/Services/Bank/ProcessBankRule.php @@ -0,0 +1,27 @@ +