Commit Graph

794 Commits

Author SHA1 Message Date
David Bomba
c64a0d153d Updated translations 2026-06-07 12:27:39 +10:00
David Bomba
2a1a07f9da Updates for translations + exposed props on user.referral. 2026-06-04 17:44:24 +10:00
David Bomba
81bb231ac4 updated translations 2026-06-04 16:02:47 +10:00
David Bomba
e891e7091a v5.13.23 2026-06-04 15:19:40 +10:00
David Bomba
24f9cc6d68 Clean up for duplicate translation keys 2026-06-04 10:57:26 +10:00
David Bomba
1ecc6695fb Translation strings for preview too large 2026-06-04 10:56:21 +10:00
David Bomba
f8fcf5775d Merge branch 'v5-develop' into v5-develop
Signed-off-by: David Bomba <turbo124@gmail.com>
2026-06-04 09:44:05 +10:00
Benjamin Beganović
2464010f3b Update translations 2026-06-03 18:55:25 +02:00
David Bomba
aefb8da3cf Fixes for ExpenseAPITest 2026-06-03 16:07:48 +10:00
David Bomba
1faf3416e4 Updated lock 2026-06-03 15:34:36 +10:00
David Bomba
eb436e646f Updates for tax period reports 2026-06-03 14:16:21 +10:00
David Bomba
5fb5a22fef Filter translations 2026-06-02 19:03:27 +10:00
David Bomba
dbdbcdc4e3 Merge branch 'v5-develop' into v5-develop
Signed-off-by: David Bomba <turbo124@gmail.com>
2026-06-02 18:58:39 +10:00
David Bomba
5d3985d0b1 Translations for QB deposit warning 2026-06-02 17:24:10 +10:00
David Bomba
6e52288a60 Fixes for nordigen connections 2026-06-02 14:14:36 +10:00
Benjamin Beganović
d28de1ab6b Update translations 2026-06-01 16:56:18 +02:00
David Bomba
488a824966 Translations for tags 2026-06-01 08:58:58 +10:00
David Bomba
d9605c8033 calendar connection translations 2026-05-31 21:58:51 +10:00
David Bomba
f59db9e69b Fixes for FR Reporting 2026-05-29 13:26:14 +10:00
David Bomba
f5e6d4d2f8 Completion of FR Reporting work 2026-05-28 12:15:04 +10:00
David Bomba
45f2e38d3d Add payment_id to paymentables 2026-05-28 10:28:06 +10:00
David Bomba
9a81c0bef0 Updates for FR e-invoicing reports 2026-05-26 13:56:16 +10:00
David Bomba
77beed1916 Updates for peppol statuses 2026-05-19 19:50:07 +10:00
David Bomba
4cf54f57ee Additional translations 2026-05-19 07:07:53 +10:00
payware
4fdaf052f7 Add translation keys for payware gateway config fields
Adds 7 keys referenced by the payware gateway UI in invoiceninja/ui#2967:
- payment_period / payment_period_help (TTL field label + help)
- payware_partner_id_label / payware_partner_id_help
- payware_vpos_id_label / payware_vpos_id_help
- payware_public_key_help

Companion to backend PR #11697 (already merged), which registered the
payware gateway (key b0a6294fca4488c2bab58f3e11e3c623) but did not add
labels/help for its credential and settings fields.
2026-05-13 08:42:05 +03:00
David Bomba
1d75567800 Merge branch 'v5-develop' into v5-develop
Signed-off-by: David Bomba <turbo124@gmail.com>
2026-05-13 09:26:36 +10:00
David Bomba
3915bb38e6 Updates for additional identifiers with PEPPOL 2026-05-12 14:53:57 +10:00
David Bomba
ba5d4d9143 Fixes for unapproved quote query 2026-05-12 06:32:26 +10:00
David Bomba
4f8ddc2135 Improvements for fees / confirmation of gateway fees 2026-05-11 09:32:59 +10:00
payware
826e85bfd2 Merge branch 'v5-develop' of github.com:invoiceninja/invoiceninja into feature/payware-payment-gateway
Resolve conflict in database/seeders/PaymentLibrariesSeeder.php: upstream
hid LawPay (gateway id 66) while this branch added payware MOBILE_PAYMENT
(gateway id 67) on the same visible-gateways line. Drop 66, keep 67.
2026-05-08 16:56:03 +03:00
David Bomba
750fa93468 Alternative row colors 2026-05-08 15:55:43 +10:00
David Bomba
1da473719f Additional translations 2026-05-07 11:18:31 +10:00
David Bomba
37ed995672 Static analysis 2026-05-06 08:15:46 +10:00
David Bomba
8bd285af19 Improve performance of previews and prevent double renders 2026-05-04 15:07:08 +10:00
David Bomba
9ffa4bed63 Fixes for csv imports 2026-05-04 13:25:41 +10:00
David Bomba
d42a55b675 Updated tests for BcMath 2026-05-04 12:20:27 +10:00
David Bomba
e195db6c94 Merge pull request #11924 from turbo124/v5-develop
V5 develop
2026-05-02 10:12:17 +10:00
David Bomba
3bd5d99e16 Add grouped by months for client sales reports 2026-05-02 09:58:39 +10:00
David Bomba
682a795b13 Working on json pdf builder 2026-05-01 16:11:10 +10:00
David Bomba
b05bcca0b9 Updated translations 2026-04-30 13:09:56 +10:00
David Bomba
37b3902396 Clean up and additional translations 2026-04-30 12:59:25 +10:00
David Bomba
c528e41656 Updated translations 2026-04-29 12:38:46 +10:00
David Bomba
00290f483c Add forte customer import 2026-04-28 17:28:41 +10:00
David Bomba
7cf23f5d63 Validation for company gateways 2026-04-28 10:23:46 +10:00
payware
7c0f2d8f98 Complete login-lockout safeguard with health-check + SystemLogger
The earlier circuit breaker (60s cooldown after 401) capped the cascade
toward the 5-strike vPOS lockout but didn't prevent it: a misconfigured
gateway saved without testing still trickle-locked the merchant. This
commit closes the loop by reusing IN's existing 'Health Check'
infrastructure (button in invoiceninja/ui Credentials.tsx, route
company_gateways.test in api.php, dispatch to driver->auth()).

Changes:
- Driver implements auth(): real round-trip against /vpos/login,
  returns 'ok' or 'error' as a translation key for the React side
  to render.
- New PaywareApi::verifyConnection() bypasses the circuit breaker so
  admin-initiated tests always get a fresh result, never gated by a
  prior failure marker.
- Successful login (admin or customer-flow) now Cache::forget()s the
  failure marker. Effect: when an admin fixes broken credentials and
  clicks Health Check, customer traffic resumes that instant - no
  60-second wait for the cooldown to expire.
- SystemLogger::dispatch(EVENT_GATEWAY_FAILURE) on createTransaction
  failure in BankTransfer::paymentData(). Login problems and other
  transient gateway failures now show up in the System Logs view with
  the technical detail, instead of being only visible via nlog.
- Customer-facing PaymentFailed message replaced with a generic,
  translated string (gateway_temporarily_unavailable, en + bg).
  Customers no longer see leaked details like 'HTTP 401' or
  'previous attempt failed, awaiting cooldown'.

No UI changes are needed: the Health Check button already exists in
the IN admin gateway form, gated on isGatewaySaved.

Modified files:
- app/PaymentDrivers/Payware/BankTransfer.php
- app/PaymentDrivers/Payware/PaywareApi.php
- app/PaymentDrivers/PaywarePaymentDriver.php
- lang/bg/texts.php
- lang/en/texts.php
2026-04-27 18:51:20 +03:00
payware
af86b398ec Address review feedback and comprehensive driver audit
Webhook integrity (security hardening alignment with server-side updates):
- Verify body via SHA-256 hash carried in JWT contentSha256 header. The
  driver was looking up contentMd5 against an md5() hash; the server now
  emits SHA-256 per recent server-side hardening, so the prior check was
  silently a no-op. Fail-closed if the header is absent.
- Tighten iat freshness to asymmetric +60s/-300s (was symmetric 300s,
  allowed future-dated tokens).
- Reject empty transactionId webhooks early (was defaulting to '' and
  would have poisoned the new dedup query).
- Filter on callbackType == TRANSACTION_FINALIZED so PROCESSED callbacks
  no longer overwrite local status mid-flight.

Idempotency (PR review item 1):
- Check existing Payment by transaction_reference + company_id before
  createPayment in the CONFIRMED branch. Prevents duplicate Payment rows
  when payware retries up to 15 times on slow IN responses.

Status enum:
- Drop local 'PENDING' string in favour of server's 'ACTIVE'. Aligns the
  polling, frontend, and webhook handler on one set of names
  (ACTIVE / CONFIRMED / DECLINED / FAILED / CANCELLED / EXPIRED).

Browser compatibility (PR review item 2 plus broader audit):
- Pass event explicitly to copy handler. Was relying on deprecated
  window.event, which is undefined in Firefox inside a Promise.then -
  the copy feedback was already silently broken there.
- Feature-detect navigator.clipboard + isSecureContext, fall back to
  document.execCommand('copy') for plain-HTTP self-hosters.
- Vendor qrcode.js into public/vendor/qrcodejs/ instead of loading from
  cdnjs (no SRI, no fallback, blocked under strict CSP). Added an
  onerror fallback that displays the payware:// URL as text.
- Drift-free countdown via Date.now() instead of a 1s setInterval that
  browsers throttle in background tabs.
- Chained setTimeout polling with AbortController instead of overlapping
  setInterval(fetch, 3000). Cancels in-flight fetches on beforeunload.
- 'No compatible app installed' helper text under the mobile pay button.
- Inline English fallback strings replaced with ctrans keys.

Confirmation flow:
- On CONFIRMED, JS now submits #server-response so paymentResponse is
  the live confirmation handler that performs the redirect (matches
  btcpay/razorpay livewire pattern). Removes the dead AJAX-poll branch
  and closes the gap where the redirect URL was client-controlled.

Currency precision:
- PaywareApi::createTransaction accepts currencyPrecision; driver pulls
  from client->currency()->precision. JPY (0 decimals) and BHD/KWD
  (3 decimals) now serialize correctly.

Login circuit breaker:
- 60s cooldown after a failed /vpos/login. Caps cascading attempts
  against payware's 5-strike vPOS lockout when credentials are
  misconfigured (without it, 5 customer page loads can lock out the
  merchant's vPOS for 15 minutes across all channels).

New 'Mobile Payment' payment type (id 53):
- Generic payment_type for mobile-initiated A2A payments. Mirrors the
  existing GatewayType::MOBILE_PAYMENT (id 30) and follows the
  precedent of MOLLIE_BANK_TRANSFER (34) and STRIPE_BANK_TRANSFER (50).
  Migration extended to seed the row idempotently. Driver now stamps
  payments with this type instead of INSTANT_BANK_PAY (which is
  GoCardless's brand for their A2A flow). Companion change for the
  React side will follow in invoiceninja/ui.

Translations:
- New keys (payment_was_not_completed, no_compatible_app_installed,
  payment_type_Mobile Payment) added to lang/en/texts.php as the source
  of truth, plus lang/bg/texts.php for completeness. Other locales fall
  back to en until community translators sync.

Modified files:
- app/Models/PaymentType.php
- app/PaymentDrivers/Payware/BankTransfer.php
- app/PaymentDrivers/Payware/PaywareApi.php
- app/PaymentDrivers/PaywarePaymentDriver.php
- database/migrations/2026_02_15_000000_add_payware_gateway.php
- lang/bg/texts.php
- lang/en/texts.php
- resources/views/portal/ninja2020/gateways/payware/pay_livewire.blade.php

New file:
- public/vendor/qrcodejs/qrcode.min.js (MIT, qrcodejs 1.0.0)
2026-04-27 16:59:51 +03:00
David Bomba
8892e31383 Updated translations 2026-04-27 10:58:40 +10:00
Vladimir
d83f1740a5 Merge v5-stable into feature/payware-payment-gateway
Resolve conflicts with upstream LawPay gateway (merged 2026-03-30):
- payware gateway ID: 66 -> 67 (LawPay took 66)
- SystemLog::TYPE_PAYWARE: 328 -> 329 (LawPay took 328)
- Merge Bulgarian translations, keeping upstream's work plus payware keys
2026-04-23 14:44:51 +03:00
David Bomba
6efe63ae05 Query improvements for client sales report 2026-04-21 11:13:13 +10:00
David Bomba
45c7fb91eb annotation for password protection field 2026-04-20 08:22:36 +10:00