Commit Graph

3415 Commits

Author SHA1 Message Date
David Bomba 8ffbb54e3b Updates for NordigenController 2025-01-22 17:22:31 +11:00
David Bomba cdb8bfef73 Fixes for continue inside a finally block 2025-01-22 13:51:31 +11:00
David Bomba b66ffbcd8f Changes for gocardless verification requirements 2025-01-22 11:19:09 +11:00
David Bomba b96d69933a Fixes for session invalidation 2025-01-21 16:42:50 +11:00
David Bomba 0283fe9193 Minor fixes for trial starts 2025-01-21 16:26:22 +11:00
David Bomba 45fe5da683 Fixes for static analysis 2025-01-20 09:52:53 +11:00
David Bomba e9fa48af00 Prevent apple signups due to no email address provision 2025-01-20 09:48:27 +11:00
David Bomba 72c35b9031
Merge pull request #10526 from dshoreman/ds/nordigen-tx-days
Nordigen custom agreements
2025-01-20 09:44:20 +11:00
David Bomba 3d80032d69 Minor changes for user verification emails 2025-01-19 17:13:30 +11:00
David Bomba 2befc2338f Add checks for existing VAT number on the network 2025-01-17 14:19:22 +11:00
David Bomba be7fb9eb10
Merge branch 'v5-develop' into v5-develop
Signed-off-by: David Bomba <turbo124@gmail.com>
2025-01-16 15:28:34 +11:00
David Bomba 20f4d64aca Updates for bulk emails 2025-01-15 20:32:52 +11:00
David Bomba ea3f6f149d minor fixes 2025-01-15 20:03:19 +11:00
David Bomba dc033ae7e9 Fixes for mailable logging 2025-01-15 18:15:34 +11:00
David Bomba cd7866ed8a Fixes for removing reactivate email 2025-01-15 15:51:34 +11:00
David Bomba 132f053b02 Always update designs post self update 2025-01-15 12:11:49 +11:00
David Bomba bd6540992a Minor cleanup for session state 2025-01-15 11:47:40 +11:00
David Bomba 7574af6c3a
Merge pull request #10525 from beganovich/INV2-1776
E-invoicing: Healthchecks & regenerating tokens
2025-01-14 18:40:21 +11:00
Dave Shoreman 684ba39f65
Show history selection screen instead of guessing
Removes all the guesswork for requisition renewals, instead opting for
the manual approach of simply redirecting to the form and updating its
handling such that it jumps straight to history selection when needed.

When the institution is preloaded (so we skip country/bank selection)
the cloned element is a country and not the bank so we need to replace
athe flag with its logo, but otherwise the code was all moved as-is.
2025-01-13 19:40:39 +00:00
Dave Shoreman 51760ef563
Support setting custom Nordigen access duration
If agreements are already available and no custom `access_days` is
passed, it will simply take the first match regardless of duration.

When a new agreement is needed, it defaults to the max supported.
2025-01-13 19:11:53 +00:00
Dave Shoreman f6a7c0ddda
Attempt to reuse existing agreements
Implements changes from #10410 but using `Arr::first()` rather than a
foreach loop to fix bugs returning invalid or expired agreements.

If an agreement exists with at least the requested `$txDays` then that
is used, otherwise a new one is created with the given parameters. If it
fails, we error out because `createRequisition()` would fail regardless.

Skips accepting EUAs: seems it's done automatically during requisition.
2025-01-13 19:10:33 +00:00
Dave Shoreman 3204163e70
Cleanup, add return types, normalise quotes 2025-01-13 19:09:02 +00:00
Dave Shoreman 66f197b857
Fix error on token-invalid failure when expired
The cache data is set to expire after an hour, at which point the call
to `$request->getCompany()` will fail because it depends internally on
the `company_key` in the response of `getTokenContent()` which is null.

By moving the company *after* the context check, we avoid the exception
but need to manually set lang as there's no context for company data.
2025-01-13 19:06:40 +00:00
Dave Shoreman fb47c29c91
Find old EUA to get tx_days for new agreement
The end user agreement ID isn't stored with the bank integration, but it
*is* returned as part of the error for an expired account which works
perfectly for the case of renewing an expired requisition.

When `tx_days` isn't set in the request (i.e. it's a renewal) we instead
extract the EUA ID from the account error after getting the integration,
then once we have the EUA we're able to restore the old tx_days setting.

Since the BankIntegration query is used in both endpoints, this moves it
to a method with `firstOrFail()` rather than `first()` which also allows
for a cleanup of the integration saving code with try/catch/finally to
make it a little clearer which values apply to both new+existing cases.
2025-01-13 19:06:01 +00:00
Dave Shoreman f501f250f4
Improve Nordigen error-handling code
All failures boil down to about 3 variations - one with reason/lang, one
that has context defined but no company data, and a full variant that
also fills the company and account keys in the view.

The only other difference is redirect url coming from config when it's
not available in the context, so to simplify things this commit merges
all the failure view responses into one unified `failed` method.
2025-01-13 19:01:04 +00:00
Dave Shoreman 2501ca17c9
Allow setting number of days of transactions
If e.g. `&tx_days=365` is added to the URL, this will use it to set the
amount of history that's fetched from Nordigen on sync, with basic
safeguards to prevent it being set too low or above the bank's max.
2025-01-13 18:49:10 +00:00
Dave Shoreman e825bb0895
Nordigen: Use institution max for bank integration
While we set the days in the agreement, how many we fetch when
processing transactions depends on the `from_date` of the bank
integration. We could call `getInstitution($id)` on the API, but
consistency would dictate adding a wrapper in the Nordigen class and
it's already being called within `$nordigen->getAccount()` so it makes
more sense to extract the data in the account transformer instead.

App\Jobs\Bank\ProcessBankTransactionsNordigen also sets a from date, but
that's only used when not set on the bank integration so it can be left
at the Nordigen default of 90 days worth of transaction history.
2025-01-13 18:45:24 +00:00
Dave Shoreman d51e1527e6
Nordigen: Pass custom agreement with max history
In order to change the total days of transactions we can request, a
custom end user agreement is needed. There *are* methods to find
existing agreements, but assuming nothing else breaks it's probably
fairly safe to just go ahead and create one.

If it works, it only runs once... as far as I can tell.
2025-01-13 18:44:40 +00:00
Benjamin Beganović ce4d22dc77 Healthcheck endpoint 2025-01-13 16:58:49 +01:00
David Bomba 7304f01de6 Ensures that invalid props cannot be saves to settings 2025-01-13 17:59:38 +11:00
David Bomba 406cc52279 Adjustments for design and dom elements / attributes 2025-01-13 14:16:55 +11:00
David Bomba 5c60a3efed Revert latest nordigen commit 2025-01-11 18:25:54 +11:00
David Bomba 48e5e5ec59 Fixes for invoice terms display incorrectly 2025-01-10 10:47:57 +11:00
David Bomba 006f3aac37
Merge pull request #10425 from dshoreman/ds/nordigen-tx-days
Nordigen Transaction history UI
2025-01-08 18:32:31 +11:00
David Bomba 24ed1922fc Task Status Order tests 2025-01-03 21:27:14 +11:00
David Bomba 960ec0fc56 Refactor for bulk project invoicing 2024-12-31 11:52:35 +11:00
David Bomba 654993a776 Add defaults for the preview on recurring invoice 2024-12-27 11:03:22 +11:00
Dave Shoreman bea4ea3387
Show history selection screen instead of guessing
Removes all the guesswork for requisition renewals, instead opting for
the manual approach of simply redirecting to the form and updating its
handling such that it jumps straight to history selection when needed.

When the institution is preloaded (so we skip country/bank selection)
the cloned element is a country and not the bank so we need to replace
athe flag with its logo, but otherwise the code was all moved as-is.
2024-12-24 03:20:40 +00:00
Dave Shoreman 691478d3e7
Support setting custom Nordigen access duration
If agreements are already available and no custom `access_days` is
passed, it will simply take the first match regardless of duration.

When a new agreement is needed, it defaults to the max supported.
2024-12-23 20:31:31 +00:00
Dave Shoreman 5f75b6a9e1
Attempt to reuse existing agreements
Implements changes from #10410 but using `Arr::first()` rather than a
foreach loop to fix bugs returning invalid or expired agreements.

If an agreement exists with at least the requested `$txDays` then that
is used, otherwise a new one is created with the given parameters. If it
fails, we error out because `createRequisition()` would fail regardless.

Skips accepting EUAs: seems it's done automatically during requisition.
2024-12-23 20:09:52 +00:00
Dave Shoreman 3bac46d83f
Cleanup, add return types, normalise quotes 2024-12-22 17:38:54 +00:00
Dave Shoreman b9464c0c25
Fix error on token-invalid failure when expired
The cache data is set to expire after an hour, at which point the call
to `$request->getCompany()` will fail because it depends internally on
the `company_key` in the response of `getTokenContent()` which is null.

By moving the company *after* the context check, we avoid the exception
but need to manually set lang as there's no context for company data.
2024-12-22 17:38:54 +00:00
Dave Shoreman 88149bc39f
Find old EUA to get tx_days for new agreement
The end user agreement ID isn't stored with the bank integration, but it
*is* returned as part of the error for an expired account which works
perfectly for the case of renewing an expired requisition.

When `tx_days` isn't set in the request (i.e. it's a renewal) we instead
extract the EUA ID from the account error after getting the integration,
then once we have the EUA we're able to restore the old tx_days setting.

Since the BankIntegration query is used in both endpoints, this moves it
to a method with `firstOrFail()` rather than `first()` which also allows
for a cleanup of the integration saving code with try/catch/finally to
make it a little clearer which values apply to both new+existing cases.
2024-12-22 17:38:54 +00:00
Dave Shoreman 74344d1b88
Improve Nordigen error-handling code
All failures boil down to about 3 variations - one with reason/lang, one
that has context defined but no company data, and a full variant that
also fills the company and account keys in the view.

The only other difference is redirect url coming from config when it's
not available in the context, so to simplify things this commit merges
all the failure view responses into one unified `failed` method.
2024-12-22 17:38:54 +00:00
Dave Shoreman 6fde8c8f13
Allow setting number of days of transactions
If e.g. `&tx_days=365` is added to the URL, this will use it to set the
amount of history that's fetched from Nordigen on sync, with basic
safeguards to prevent it being set too low or above the bank's max.
2024-12-22 17:38:54 +00:00
Dave Shoreman fa54ef9830
Nordigen: Use institution max for bank integration
While we set the days in the agreement, how many we fetch when
processing transactions depends on the `from_date` of the bank
integration. We could call `getInstitution($id)` on the API, but
consistency would dictate adding a wrapper in the Nordigen class and
it's already being called within `$nordigen->getAccount()` so it makes
more sense to extract the data in the account transformer instead.

App\Jobs\Bank\ProcessBankTransactionsNordigen also sets a from date, but
that's only used when not set on the bank integration so it can be left
at the Nordigen default of 90 days worth of transaction history.
2024-12-22 17:38:54 +00:00
Dave Shoreman b723c9e16a
Nordigen: Pass custom agreement with max history
In order to change the total days of transactions we can request, a
custom end user agreement is needed. There *are* methods to find
existing agreements, but assuming nothing else breaks it's probably
fairly safe to just go ahead and create one.

If it works, it only runs once... as far as I can tell.
2024-12-22 17:38:50 +00:00
David Bomba 265f72369c Cleanup for peppol 2024-12-21 10:28:21 +11:00
David Bomba 1164507da7 Fixes for nordigen 2024-12-18 20:20:57 +11:00
Dave Shoreman 73166f422a
Fix nordigen account failsafe
This check was added at a time when `getAccount` would return `false`
for failures, but at some point it was updated to always return arrays.

This fixes the check to avoid issues like #10396 where the following
line triggers a missing 'id' key error.
2024-12-18 00:05:32 +00:00