Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ConnectedBankAccountService.php 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Accounting\Account;
  4. use App\Models\Banking\BankAccount;
  5. use App\Models\Banking\ConnectedBankAccount;
  6. use App\Models\Company;
  7. use App\Repositories\Accounting\AccountSubtypeRepository;
  8. use App\Repositories\Banking\ConnectedBankAccountRepository;
  9. class ConnectedBankAccountService
  10. {
  11. protected AccountSubtypeRepository $accountSubtypeRepository;
  12. protected ConnectedBankAccountRepository $connectedBankAccountRepository;
  13. public function __construct(AccountSubtypeRepository $accountSubtypeRepository, ConnectedBankAccountRepository $connectedBankAccountRepository)
  14. {
  15. $this->accountSubtypeRepository = $accountSubtypeRepository;
  16. $this->connectedBankAccountRepository = $connectedBankAccountRepository;
  17. }
  18. public function getOrProcessBankAccountForConnectedBankAccount(Company $company, ConnectedBankAccount $connectedBankAccount, int | string $selectedBankAccountId): BankAccount
  19. {
  20. if ($selectedBankAccountId === 'new') {
  21. return $this->connectedBankAccountRepository->createBankAccountForConnectedBankAccount($company, $connectedBankAccount);
  22. }
  23. return $company->bankAccounts()->find($selectedBankAccountId);
  24. }
  25. public function getOrProcessAccountForConnectedBankAccount(BankAccount $bankAccount, Company $company, ConnectedBankAccount $connectedBankAccount): Account
  26. {
  27. if ($bankAccount->account()->doesntExist()) {
  28. return $this->processNewAccountForBank($bankAccount, $company, $connectedBankAccount);
  29. }
  30. return $bankAccount->account;
  31. }
  32. public function processNewAccountForBank(BankAccount $bankAccount, Company $company, ConnectedBankAccount $connectedBankAccount): Account
  33. {
  34. $defaultAccountSubtypeName = $this->accountSubtypeRepository->getDefaultAccountSubtypeByType($bankAccount->type);
  35. $accountSubtype = $this->accountSubtypeRepository->findAccountSubtypeByNameOrFail($company, $defaultAccountSubtypeName);
  36. return $this->connectedBankAccountRepository->createAccountForConnectedBankAccount($company, $connectedBankAccount, $bankAccount, $accountSubtype);
  37. }
  38. }