Commit Graph

813 Commits

Author SHA1 Message Date
7c8497ccfe feat: add Revolut payment link to ViewLocationCard
- Display Revolut payment link when enableRevolutPayment is enabled and tenantPaymentMethod is "revolut"
- Generate payment link with profile name (@ symbol removed), amount, currency, and reference
- Convert amount from cents to main currency unit (divide by 100, fixed to 2 decimals)
- Add placeholder for QR code (to be implemented)
- Remove unused import (inspector)

Payment link format: https://revolut.me/{profile}?amount={amount}&currency={currency}&reference={text}

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:45:19 +01:00
4e9e5ca8d2 feat: add validation for Revolut profile name format
- Add ownerRevolutProfileName field validation when enableRevolutPayment is true
- Validate profile name must start with '@' and contain only letters and numbers
- Add required field validation for Revolut profile name
- Add English and Croatian error messages for validation failures
- Update State type to include ownerRevolutProfileName errors

Validation regex: /^@[a-zA-Z0-9]+$/
Valid examples: @john123, @ivan, @user2024

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:39:37 +01:00
c4c9b409d0 style: normalize English translation capitalization
- Change uppercase section headers to title case for consistency
- "AUTOMATIC UTILITY BILL FORWARDING" → "Automatic utility bill forwarding"
- "AUTOMATIC RENT NOTIFICATION" → "Automatic rent notification"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:35:12 +01:00
3e581d8878 refactor: replace generateTenantCode boolean with tenantPaymentMethod enum
- Replace generateTenantCode boolean field with tenantPaymentMethod enum ("none" | "iban" | "revolut")
- Update LocationEditForm to use dropdown select instead of toggle for payment method selection
- Consolidate multiple useState hooks into single formValues state object
- Change from defaultValue to controlled components with value/onChange pattern
- Add hidden inputs to preserve tenant data when payment method is not selected
- Update validation logic to check tenantPaymentMethod === "iban"
- Update ViewLocationCard to use new tenantPaymentMethod field
- Add Croatian translations for new dropdown options

This provides better scalability for adding future payment methods and improves form state management.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 15:34:59 +01:00
ead7451170 (refactor) LocationEditForm: renaming localization string names 2025-11-24 14:50:54 +01:00
632f8888b5 refactor: replace payment dropdown with independent toggles
- Replace showPaymentInstructionsInMonthlyStatement dropdown with enableIbanPayment and enableRevolutPayment boolean toggles
- Update UserSettingsForm to use separate fieldsets for IBAN and Revolut with independent toggle switches
- Add hidden inputs to preserve values when toggles are disabled
- Update validation logic to check enableIbanPayment instead of show2dCodeInMonthlyStatement
- Reorganize translation keys to match new structure (iban-* and revolut-* prefixes)
- Update ViewLocationCard to use enableIbanPayment field

This provides better UX by allowing users to enable both payment methods simultaneously if needed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 14:45:59 +01:00
686bec6c10 feat: add Revolut payment link support alongside IBAN
- Add NoteBox component for displaying warning messages with icon
- Add Revolut profile name field to user settings schema
- Update UserSettingsForm to support payment instruction selection (disabled/IBAN/Revolut)
- Add Croatian and English translations for new payment options
- Reserve fields for future per-instruction enable/disable functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 13:37:54 +01:00
Knee Cola
187fe29bb1 Merge branch 'hotfix/2.1.2' 2025-11-23 23:03:11 +01:00
Knee Cola
64b31a08b4 Merge branch 'hotfix/2.1.2' into develop 2025-11-23 23:03:11 +01:00
Knee Cola
b3126d6ef3 chore: update version to 2.1.2 in package.json and package-lock.json 2025-11-23 23:03:02 +01:00
Knee Cola
134f04d634 fix: format IBAN in payment info on ViewLocationCard 2025-11-23 23:02:46 +01:00
Knee Cola
9f94f0996a Merge branch 'hotfix/2.1.1' 2025-11-23 23:00:38 +01:00
Knee Cola
e9ec26091e Merge branch 'hotfix/2.1.1' into develop 2025-11-23 23:00:38 +01:00
Knee Cola
3cbd60767e chore: update version to 2.1.1 in package.json and package-lock.json 2025-11-23 23:00:32 +01:00
Knee Cola
a593d2a373 (chore) Dockerfile: remove USE_MOCK_AUTH environment variable 2025-11-23 23:00:07 +01:00
Knee Cola
cfe5158112 Merge branch 'release/2.1.0' 2025-11-23 22:51:59 +01:00
Knee Cola
cce03028de Merge branch 'release/2.1.0' into develop 2025-11-23 22:51:59 +01:00
Knee Cola
f8ae0c780e 2.1.0 2025-11-23 22:51:45 +01:00
Knee Cola
4c1c8e3346 Merge branch 'feature/fixing-bugs' into develop 2025-11-23 22:51:06 +01:00
Knee Cola
db65d82ab5 (refactor) BillEditForm: billed-to-* converted from radio buttons to select; added info box 2025-11-23 22:49:05 +01:00
Knee Cola
eddddb4199 (refactor) LocationCard: replaced pay receit icon 2025-11-23 22:31:10 +01:00
Knee Cola
fda4b59e58 (refactor) PrintPreview: fixing Pdf417Barcode margin & size 2025-11-23 22:28:03 +01:00
Knee Cola
fcecaaa901 (refactor) dbTypes: added utilBillsProofOfPaymentUploadedAt to BillingLocation 2025-11-23 22:13:09 +01:00
Knee Cola
7a01dad5e7 (refactor) locationActions: add timestamp for utility bills proof of payment upload 2025-11-23 21:58:04 +01:00
Knee Cola
3389bce755 (refactor) locationActions: preventing multiple proof of payment uploads 2025-11-23 21:56:18 +01:00
Knee Cola
54a9de77d3 (refactor) ViewBillCard: formatting 3D bar code 2025-11-23 21:52:09 +01:00
Knee Cola
7722cbdf0a (refactor) ViewLocationCard: formatting 2D code 2025-11-23 21:49:22 +01:00
Knee Cola
90d6c31678 (bugfix) ViewLocationCart: still fixing conditional hub3a calculation 2025-11-23 21:42:15 +01:00
Knee Cola
6c43c69934 (bugfix) ViewLocationCard: hub3a string was calculated even if this option was disabled 2025-11-23 21:39:05 +01:00
Knee Cola
9cc5241c05 Merge branch 'release/2.0.1' into develop 2025-11-23 12:54:38 +01:00
Knee Cola
49ed0da64d Merge branch 'release/2.0.1' 2025-11-23 12:54:37 +01:00
Knee Cola
8998bbae7d 2.0.1 2025-11-23 12:54:25 +01:00
Knee Cola
fb3393c985 (bugfix) decoding hub3a from image did not work 2025-11-23 12:53:35 +01:00
Knee Cola
d3ae787ae1 Merge branch 'release/2.0.0' 2025-11-23 12:08:50 +01:00
Knee Cola
5e66611c36 Merge branch 'release/2.0.0' into develop 2025-11-23 12:08:50 +01:00
Knee Cola
ab9cead175 2.0.0 2025-11-23 12:08:39 +01:00
Knee Cola
07f120fe8a Merge branch 'feature/2d-code-in-location-view' into develop 2025-11-23 12:07:51 +01:00
Knee Cola
81bfcd16af optimizing print barcode size 2025-11-23 12:05:36 +01:00
Knee Cola
3368e56124 refactoring components to match the optimized projections 2025-11-23 12:00:12 +01:00
Knee Cola
1995ad9de9 optimizing DB projections 2025-11-23 11:59:06 +01:00
Knee Cola
fcf3c447d1 fix: Update proof of payment label to use consistent PDF file extension 2025-11-23 11:58:10 +01:00
Knee Cola
34fda9f622 refactor: Improve tenant payment instructions UX and disable incomplete features
Renamed "2D CODE" feature to "PAYMENT INSTRUCTIONS" for better clarity
and disabled incomplete auto-forwarding features.

Changes:
- Renamed tenant 2D code section to "Payment Instructions"
- Updated labels to reflect that feature shows payment instructions + 2D code
- Added InfoBox with important note about required app settings (name & IBAN)
- Disabled auto bill forwarding toggle (feature incomplete)
- Disabled rent due notification toggle (feature incomplete)
- Updated translations in both English and Croatian

The new naming better reflects what the feature does: showing payment
instructions with IBAN details and a scannable 2D code to tenants.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 11:06:50 +01:00
Knee Cola
8e5b1d7239 fix: Only show proof of payment link when attachment exists
Added conditional check to display proof of payment link only when
utilBillsProofOfPaymentAttachment is present in LocationCard.

Previously the link was always rendered, even when no attachment
was uploaded. This fix ensures the link only appears when there's
actually a proof of payment file available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 10:52:52 +01:00
Knee Cola
9d53fb1753 chore: Upgrade pdfjs-dist from 4.0.379 to 4.10.38
Updated PDF.js library to version 4.10.38 for improved PDF rendering
and barcode scanning capabilities.

Changes:
- package.json: Updated pdfjs-dist dependency to ^4.10.38
- package-lock.json: Updated dependency tree
- public/pdf.worker.min.mjs: Updated PDF.js worker file
- app/lib/pdf/barcodeDecoder.ts: Removed unused import

This is a minor version update within v4, maintaining API compatibility
while receiving bug fixes and improvements.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 10:48:51 +01:00
Knee Cola
2cfafa6cde chore: Update npm dependencies
- Removed @napi-rs/canvas optional dependencies from package-lock.json
- Added pdf.sandbox.mjs.map to public directory

These changes optimize the dependency tree by removing unused canvas
rendering dependencies.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 10:45:08 +01:00
Knee Cola
25ae19980a UI: Center-align PDF417 barcode within label containers
Added justify-center class to label elements containing Pdf417Barcode
component for better visual alignment.

Changes:
- BillEditForm: Center barcode in form display
- ViewBillCard: Center barcode in read-only view

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 10:43:33 +01:00
Knee Cola
7a5c503ce9 Refactor: Complete barcodeImage removal and hub3aText migration
This commit completes the migration from storing bitmap barcodes to using
decoded HUB-3A text strings, removing all legacy code while maintaining
backward compatibility during the transition period.

Database & Server Actions:
- billActions: Removed commented legacy barcodeImage code
- locationActions: Updated field references in projections
- monthActions: Use hub3aText when copying bills to new months
- printActions: Support both hub3aText and barcodeImage during migration
  - Added @deprecated annotation to barcodeImage field
  - Filter includes bills with either field
  - Pass both fields to support gradual migration

Barcode Decoder:
- Removed barcodeImage field from DecodeResult type
- Deleted copyBarcodeImage() function (58 lines)
  - No longer generating bitmaps during decode
  - Barcodes now generated on-demand from hub3aText
- Cleaner separation: decoder extracts text, component renders barcode

UI Components:
- Pdf417Barcode: Added optional className prop for styling flexibility
  - Removed unnecessary wrapper div
  - Conditional styling (use className or default dimensions)
- PrintPreview: Use Pdf417Barcode component with fallback to legacy barcodeImage
- ViewBillCard: Major cleanup and migration support
  - Removed unused imports (React, updateOrAddBill, useLocale)
  - Removed unused middleware function
  - Removed unused variables and hidden input
  - Prefer hub3aText with Pdf417Barcode, fallback to barcodeImage
  - Clear legacy support comments

Migration Strategy:
All rendering code now follows the pattern:
1. Prefer hub3aText (new field) when available
2. Fallback to barcodeImage (legacy field) if needed
3. Clear comments marking legacy support code
4. Allows gradual migration without breaking existing bills

Benefits:
- More efficient storage (text vs base64 bitmap)
- Barcodes generated on-demand (not stored)
- Cleaner, more maintainable code
- Consistent use of Pdf417Barcode component
- Removed ~60 lines of unused code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 09:03:53 +01:00
Knee Cola
89c06e2799 Refactor: Complete barcodeImage to hub3aText migration across codebase
Database & Types:
- Added hub3aText field to Bill interface in db-types.ts
- Marked barcodeImage as @deprecated legacy field

Server Actions:
- Updated billActions to read/write hub3aText instead of barcodeImage
- Commented out legacy barcodeImage code with migration notes

Barcode Decoder:
- Renamed image2canvas to file2canvas for clarity
- Added new image2canvas function for base64 encoded images (migration support)
- Added hub3aText to DecodeResult type
- Exported decodeFromImage function for legacy data migration
- Updated decoding logic to extract and return hub3aText

UI Components:
- Refactored Pdf417Barcode to accept hub3aText string instead of PaymentParams
- Removed EncodePayment call from Pdf417Barcode (now expects pre-encoded text)
- Updated ViewLocationCard to encode payment params before passing to Pdf417Barcode

This completes the refactoring from storing bitmap images to storing decoded
HUB-3A payment strings, providing more efficient storage and easier data manipulation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 08:25:06 +01:00
Knee Cola
278976b75b Refactor: Replace barcodeImage with hub3aText in BillEditForm
- Changed from storing base64-encoded bitmap to decoded HUB-3A payment string
- Implemented migration logic to convert legacy barcodeImage to hub3aText on component mount
- Updated state management to use hub3aText instead of barcodeImage
- Replaced image display with Pdf417Barcode component for consistent rendering
- Added error handling for migration promise
- Updated useEffect dependencies to prevent stale closures
- More efficient storage and easier to work with payment data going forward

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 08:24:08 +01:00
Knee Cola
a254ca5430 Improve LocationCard monthly statement section with proof of payment link
Changes:
- Added utilBillsProofOfPaymentAttachment to LocationCard component
- Updated monthly statement fieldset to show when proof of payment exists
- Added visual indicators with icons:
  - CheckCircleIcon next to payed total amount
  - EyeIcon for "seen by tenant" status (changed from CheckCircleIcon)
  - LinkIcon for proof of payment download link
- Added download link for proof of payment with success indicator
- Code formatting improvements and removed console.log
- Updated translations to lowercase:
  - English: "Seen by tenant" -> "seen by tenant"
  - Croatian: "Viđeno od strane podstanara" -> "viđeno od strane podstanara"
- Added Croatian translation:
  - "download-proof-of-payment-label": "potvrda-o-uplati.pdf"

The monthly statement section now displays proof of payment status
with a download link when available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 00:10:58 +01:00