Commit Graph

998 Commits

Author SHA1 Message Date
Knee Cola
b3e4e3591c (refactor) locationAction: optimizing query not to return binary data 2025-12-07 16:05:42 +01:00
Knee Cola
47bea328e7 (bugfix) billAction: file type validation was failing if not file was attached 2025-12-07 16:05:10 +01:00
Knee Cola
25865cfae4 BillBage: implemented proof-of-payment indicator 2025-12-07 16:04:09 +01:00
Knee Cola
7994f9ebdb Add info box for billed-to selection in BillEditForm 2025-12-07 16:02:02 +01:00
Knee Cola
0b6555eff3 Update ViewLocationCard to use new combined proof download route
Changed proof of payment download link from old route structure
/share/proof-of-payment/[id]/ to new structure
/share/proof-of-payment/combined/[id]/

This aligns with the reorganized route structure that separates
combined and per-bill proof of payment downloads.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 13:40:11 +01:00
Knee Cola
534955a9fa Fix MongoDB projection error in uploadProofOfPayment
Fixed mixed inclusion/exclusion projection that caused error:
"Cannot do inclusion on field bills.proofOfPayment.uploadedAt in exclusion projection"

Changed projection to use exclusion-only:
- Exclude bills.attachment (not needed in upload context)
- Exclude bills.proofOfPayment.fileContentsBase64 (large file data)
- Include all other fields implicitly (including uploadedAt for existence check)

This reduces data transfer while maintaining MongoDB projection compatibility.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 13:38:48 +01:00
Knee Cola
65b5a1cdd5 Implement proof of payment download routes
Added two download routes for proof of payment files:

1. Combined route: /share/proof-of-payment/combined/[id]/
   - Downloads location-level proof of payment for all utilities
   - Queries utilBillsProofOfPayment from location
   - Optimized projection for efficient data transfer

2. Per-bill route: /share/proof-of-payment/per-bill/[id]/
   - Downloads proof of payment for individual bills
   - Parses composite ID format: locationID-billID
   - Finds specific bill in location's bills array
   - Returns bill.proofOfPayment

Both routes:
- Return PDF files with proper Content-Type and headers
- Handle 404 for missing locations/bills/proofs
- Use Base64 to binary conversion for file delivery
- Include Last-Modified header for caching
- Use optimized database projections

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 13:31:39 +01:00
Knee Cola
6a86ebd747 Fix per-bill proof of payment field name and add environment config
- Updated uploadProofOfPayment to expect 'proofOfPayment' field name
  instead of 'utilBillsProofOfPayment' for semantic clarity
- Removed old not-found.tsx from deprecated route structure
- Added required environment variables for file upload validation:
  - MAX_BILL_ATTACHMENT_UPLOAD_SIZE_KB=1024
  - MAX_PROOF_OF_PAYMENT_UPLOAD_SIZE_KB=1024
- Updated package-lock.json with peer dependency metadata

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 13:16:37 +01:00
Knee Cola
aa573c68a3 Implement per-bill proof of payment and update field names
Frontend changes:
- Added ViewBillCard proof of payment upload for per-bill mode
  - Conditional rendering based on proofOfPaymentType
  - File upload with PDF validation and loading states
  - Download link to /share/proof-of-payment/per-bill/
- Updated LocationCard to use new utilBillsProofOfPayment field structure

Backend changes:
- Updated locationActions with improved file validation
  - File size validation using MAX_PROOF_OF_PAYMENT_UPLOAD_SIZE_KB
  - PDF type validation before database operations
  - Enhanced serializeAttachment with FileAttachment type
  - Updated database projections for optimized queries
- Updated monthActions to use consolidated field name
- Updated proof-of-payment download route with new field names

Data structure migration:
- Replaced utilBillsProofOfPaymentAttachment + utilBillsProofOfPaymentUploadedAt
  with single utilBillsProofOfPayment object containing uploadedAt
- Consistent use of FileAttachment type across all upload functions

Translations:
- Added upload-proof-of-payment-legend and upload-proof-of-payment-label
  to bill-edit-form section in both English and Croatian

This completes the proof of payment feature implementation for both
combined (location-level) and per-bill modes.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 13:11:17 +01:00
Knee Cola
0facc9c257 Add uploadProofOfPayment and improve file validation
- Implemented uploadProofOfPayment function for per-bill proof of payment
  - Validates file size using MAX_PROOF_OF_PAYMENT_UPLOAD_SIZE_KB env variable
  - Validates PDF file type
  - Prevents duplicate uploads with existence check
  - Uses optimized database projection to minimize data transfer
  - Updates specific bill using MongoDB array filters

- Refactored file validation in updateOrAddBill
  - Moved validation before serialization for fail-fast behavior
  - Added configurable file size limit from environment variable
  - Added PDF type validation
  - Improved error messages with specific validation failures

- Updated serializeAttachment function
  - Changed return type from BillAttachment to FileAttachment
  - Added uploadedAt timestamp to attachment object
  - Removed unsafe type cast

- Code formatting improvements throughout
  - Consistent spacing and indentation
  - Better TypeScript typing

This completes the per-bill proof of payment feature implementation.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 12:24:52 +01:00
Knee Cola
a25a97f68b Add conditional rendering for proof of payment in ViewLocationCard
- Show upload section only when proofOfPaymentType is "combined"
- Updated field names to use new FileAttachment structure:
  - utilBillsProofOfPaymentAttachment → utilBillsProofOfPayment
  - utilBillsProofOfPaymentUploadedAt → utilBillsProofOfPayment.uploadedAt
- Updated FormData and input field names for consistency
- Improved code formatting and spacing throughout

This enables proper handling of the three proof of payment options:
- "none": No upload section shown
- "combined": Shows single proof upload for all utilities (this change)
- "per-bill": No upload section (handled per individual bill)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 11:36:27 +01:00
Knee Cola
1c7edabcbe Refactor types to support per-bill proof of payment
- Renamed BillAttachment to FileAttachment for better generalization
- Added uploadedAt field to FileAttachment (consolidates timestamp)
- Renamed utilBillsProofOfPaymentAttachment to utilBillsProofOfPayment
- Removed separate utilBillsProofOfPaymentUploadedAt field (now in FileAttachment)
- Added rentProofOfPayment field to BillingLocation for rent-specific proof
- Added proofOfPayment field to Bill interface for per-bill attachments
- Removed unused imports (ObjectId, inter)

This refactoring enables both "combined" (location-level) and "per-bill"
proof of payment attachment strategies.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 11:30:23 +01:00
Knee Cola
dd4c92be77 Add "none" option for proof of payment type
Enhanced the proof of payment attachment feature with the following improvements:

- Renamed field from `proofOfPaymentAttachmentType` to `proofOfPaymentType` for consistency
- Added "none" option allowing users to disable proof of payment attachments
- Changed default value from "combined" to "none" for better UX
- Repositioned section in form after payment instructions (more logical flow)
- Added conditional warning when "combined" is selected without payment method
- Updated translations with emojis and improved tooltips for all options
- Backend validation and database operations updated to support new field structure

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 11:19:51 +01:00
Knee Cola
2483b7bca5 locationEditForm: added proofOfPaymentAttachmentType 2025-12-07 01:29:48 +01:00
Knee Cola
81077b2ebf Merge branch 'release/2.11.0' 2025-11-29 13:16:00 +01:00
Knee Cola
4dfed827b1 Merge branch 'release/2.11.0' into develop 2025-11-29 13:16:00 +01:00
Knee Cola
9b5dd98c6c 2.11.0 2025-11-29 13:14:33 +01:00
Knee Cola
f3e13b8e6c Merge branch 'feature/homepage-auth-detection' into develop 2025-11-29 13:13:42 +01:00
Knee Cola
06ba45bbeb Show 'Go to App' button for authenticated users on landing page
Instead of displaying sign-in buttons to already authenticated users,
the homepage now detects authentication status and shows a 'Go to App'
button that redirects to the home page.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 13:13:15 +01:00
Knee Cola
f3c37086a3 Merge branch 'release/2.10.0' into develop 2025-11-26 20:56:45 +01:00
Knee Cola
ed20f3b50a Merge branch 'release/2.10.0' 2025-11-26 20:56:44 +01:00
Knee Cola
68d843f214 2.10.0 2025-11-26 20:56:19 +01:00
Knee Cola
be2e711fd3 Merge branch 'feature/umami-tracking' into develop 2025-11-26 20:55:59 +01:00
Knee Cola
d898f79ba3 Add Umami analytics tracking for key user interactions
Integrates Umami analytics with production-only tracking script and event tracking for user login and location creation actions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:55:05 +01:00
Knee Cola
86d3587fb7 Merge branch 'release/2.9.0' into develop 2025-11-26 20:33:51 +01:00
Knee Cola
8239985e45 Merge branch 'release/2.9.0' 2025-11-26 20:33:50 +01:00
Knee Cola
08b3564810 2.9.0 2025-11-26 20:33:20 +01:00
Knee Cola
5ddc8c389c Merge branch 'feature/location-card-simplification' into develop 2025-11-26 20:32:34 +01:00
Knee Cola
4f38fa4496 Add expand and fade-in animations to conditional form sections
Add smooth animations to form sections that appear when toggles are enabled, improving user experience with visual feedback.

Changes:
- Add expandFadeIn keyframe animation to Tailwind config
- Apply expand-fade-in animation to UserSettingsForm payment sections
- Apply expand-fade-in animation to LocationEditForm conditional fields
- Update account page HomeIcon color from green to white for consistency

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:31:41 +01:00
Knee Cola
eed92b5ac3 Replace seenByTenant boolean with seenByTenantAt timestamp field
Update location tracking to record when tenant views a location rather than just whether they've seen it. This provides better audit trail and enables future features like viewing history.

Changes:
- Convert seenByTenant (boolean) to seenByTenantAt (Date) in database schema
- Update setSeenByTenantAt action to store timestamp instead of boolean flag
- Modify LocationCard UI to display when location was seen by tenant
- Update all references across locationActions, monthActions, and view components
- Remove unused imports from ViewLocationCard

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 20:10:18 +01:00
4139e29de8 Merge branch 'release/2.8.0' into develop 2025-11-26 14:10:09 +01:00
4755ce10ae Merge branch 'release/2.8.0' 2025-11-26 14:10:08 +01:00
9460c605ea 2.8.0 2025-11-26 14:09:58 +01:00
b3356ccf18 Update browserslist database and Claude Code settings
- Update caniuse-lite from 1.0.30001588 to 1.0.30001757
- Add npm run build to Claude Code auto-approved commands

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:09:40 +01:00
ddfa0a5595 Fix ESLint warnings for img elements
Add ESLint disable comments for @next/next/no-img-element warnings where appropriate (barcode images with base64 data URIs don't benefit from Next.js Image optimization) and add missing alt attribute to PDF417 barcode component.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:07:27 +01:00
22ba5c4adc Merge branch 'feature/account-page-goto-home-button' into develop 2025-11-26 13:51:58 +01:00
985fb4bc41 Add smooth open/close animation to InfoBox component
Implements a slide-down fade-in animation when the InfoBox expands, improving the user experience with smooth visual transitions.

Changes:
- Add animateDown keyframe animation to Tailwind config
- Apply animation to InfoBox content div when opened
- Animation includes opacity fade, vertical slide, and max-height transition
- Update InfoBox width to use responsive sizing (17rem on mobile, 28rem on larger screens)
- Change icon color to green for better visual consistency

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 13:51:17 +01:00
364a12f9d6 Add home navigation button and improve account page UI
Enhances the account page navigation by adding a "Back to home" button and improving the overall user experience with better visual hierarchy and navigation flow.

Changes:
- Add home navigation button to account page with green icon
- Update logout button styling with red icon for visual emphasis
- Improve settings button label clarity
- Fix settings cancel button to navigate back to account page
- Increase account icon size in page header
- Update translation keys for consistency across EN/HR

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 13:26:19 +01:00
030af7f387 Merge branch 'develop' 2025-11-26 12:29:26 +01:00
982a8f0f88 Update backup retention policy and documentation for clarity 2025-11-26 12:29:16 +01:00
a080c92aae Merge branch 'develop' 2025-11-26 11:42:35 +01:00
19ed709faa (BugFix) standalone backup script had a simple error 2025-11-26 11:42:28 +01:00
0eacbca9ac Merge branch 'develop' 2025-11-26 11:21:38 +01:00
2375c1a193 Consolidate backup storage to single mongo-backup directory
- Unify all backup scripts to use ./mongo-backup/ directory
- Update db-backup--standalone.sh to store volume backups in mongo-backup/
- Update db-backup--swarm.sh to use mongo-backup as default directory
- Update db-restore-from-backup--swarm.sh to look in mongo-backup/
- Update all header comments and documentation to reflect new location
- Update .gitignore to ignore both backups/ and mongo-backup/
- Update README.md with consolidated backup directory paths

This simplifies backup management by having all backup types in one location.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 11:20:29 +01:00
5041d90970 Merge branch 'release/2.7.4' 2025-11-26 11:12:35 +01:00
ba2a278d7e Merge branch 'feature/improving-backup' into develop 2025-11-26 11:12:09 +01:00
4454ea3b7e Enhance backup system with comprehensive scripts and documentation
Database Backup Scripts:
- Add db-dump--standalone.sh for online database dumps (no downtime)
- Add db-restore-from-dump--standalone.sh for restoring from dumps
- Rename backup scripts with double-dash convention for clarity
- Add comprehensive header comments to all backup/restore scripts
- Document online vs offline, standalone vs swarm deployment types
- Add KEEP variable default (7) to dump script for rotation

Docker Configuration:
- Add mongo-backup volume mount to docker-compose-standalone.yaml
- Add mongo-backup volume mount to docker-compose-debug.yml
- Add container names to debug compose for consistency with standalone

Documentation:
- Add comprehensive Database Backup & Restore section to README.md
- Document all backup scripts with usage examples
- Document automated cron schedule (04:00 daily)
- Sunday: Full volume backup (KEEP=2, offline)
- Monday-Saturday: Database dumps (KEEP=7, online)
- Document backup directories and log file locations

Git Configuration:
- Add mongo-backup/ to .gitignore
- Fix missing newline at end of .gitignore

File Cleanup:
- Remove db-scheduled-backup.sh (superseded by cron jobs)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 11:11:17 +01:00
941ee57c90 Merge remote-tracking branch 'origin/develop' 2025-11-26 09:42:39 +01:00
dc5698d7d6 Improve backup scripts with logging and remove duplicate rotation
db-backup-standalone.sh:
- Add logging with timestamps to backups/db-backup-standalone.log
- Add SCRIPT_DIR to make all paths relative to script location
- Add detailed logging for each backup step (stop, backup, rotate, start)
- Log rotation status and which old backups are removed

db-scheduled-backup.sh:
- Remove duplicate backup rotation logic (now handled in standalone script)
- Comment out cleanup code to avoid redundant operations

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 09:42:20 +01:00
a3dcc22c8c Merge branch 'release/2.7.3' 2025-11-26 09:30:41 +01:00