mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 11:34:13 +00:00
* Add customizable budget month start day (#253) Allow users to set a custom month-to-date start date (1st-28th) for budgeting and MTD calculations. Useful for users who want budget periods aligned with their pay schedule (e.g., 25th to 24th). Changes: - Add month_start_day column to families table (default: 1) - Add database check constraint for valid range (1-28) - Add Family#uses_custom_month_start?, custom_month_start_for, custom_month_end_for, current_custom_month_period helper methods - Add Period.current_month_for(family), last_month_for(family) methods - Update Budget model for custom month boundaries in find_or_bootstrap, param_to_date, budget_date_valid?, current?, and name methods - Add month_start_day setting to Settings > Preferences UI - Add warning message when custom month start day is configured - Add comprehensive tests with travel_to for date robustness Fixes #253 * Add /api/v1/user endpoint for Flutter mobile app and PWA Expose user preferences including month_start_day via API endpoint following existing pattern for default_period. This allows Flutter mobile app and PWA to read/update user preferences through a consistent API contract. Endpoints: - GET /api/v1/user - Read user preferences including family settings - PATCH /api/v1/user - Update user preferences Response includes: id, email, first_name, last_name, default_period, locale, and family settings (currency, timezone, date_format, country, month_start_day). * Update Periodable to use family-aware MTD periods When users select 'current_month' or 'last_month' period filters on dashboard/reports, now respects the family's custom month_start_day setting instead of using static calendar month boundaries. This ensures MTD filter on dashboard is consistent with how budgets calculate their periods when custom month start day is configured. * Fix param_to_date to correctly map budget params to custom periods When a family uses a custom start day, the previous implementation called custom_month_start_for on the 1st of the month, which incorrectly shifted dates before the start day to the previous month. Now we directly construct the date using family.month_start_day, so 'jan-2026' with month_start_day=25 correctly returns Jan 25, 2026 instead of Dec 25, 2025. * Fix param_to_date and use Current pattern in API controller - Fix param_to_date to directly construct date with family.month_start_day instead of using custom_month_start_for which incorrectly shifted dates - Replace current_user with Current.user/Current.family in API controller to follow project convention used in other API v1 controllers * Add i18n for budget name method Use I18n.t for localizable budget period names to follow project conventions for user-facing strings. * Remove unused budget_end variable in budget_date_valid? * Use Date.current for timezone consistency in Budget#current? * Address PR review feedback - Remove API users endpoint (mobile won't use yet) - Remove user route from config/routes.rb - Remove ai_summary/document_type schema bleed from pdf-import-ai branch * Pass family to param_to_date for custom month logic * Run migration to add month_start_day column to schema * Schema regressions --------- Co-authored-by: mkdev11 <jaysmth689+github@users.noreply.github.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
173 lines
8.0 KiB
YAML
173 lines
8.0 KiB
YAML
---
|
|
en:
|
|
views:
|
|
settings:
|
|
payments:
|
|
renewal: "Your contribution continues on %{date}."
|
|
cancellation: "Your contribution ends on %{date}."
|
|
settings:
|
|
ai_prompts:
|
|
show:
|
|
page_title: AI Prompts
|
|
openai_label: OpenAI
|
|
disable_ai: Disable AI Assistant
|
|
prompt_instructions: Prompt Instructions
|
|
main_system_prompt:
|
|
title: Main System Prompt
|
|
subtitle: Core instructions that define how the AI assistant behaves in all chat conversations
|
|
transaction_categorizer:
|
|
title: Transaction Categorizer
|
|
subtitle: AI automatically categorizes your transactions based on your defined categories
|
|
merchant_detector:
|
|
title: Merchant Detector
|
|
subtitle: AI identifies and enriches transaction data with merchant information
|
|
payments:
|
|
show:
|
|
page_title: Payments
|
|
subscription_subtitle: Update your credit card details
|
|
subscription_title: Manage contributions
|
|
preferences:
|
|
show:
|
|
country: Country
|
|
currency: Currency
|
|
date_format: Date format
|
|
general_subtitle: Configure your preferences
|
|
general_title: General
|
|
default_period: Default Period
|
|
default_account_order: Default Account Order
|
|
language: Language
|
|
language_auto: Browser language
|
|
page_title: Preferences
|
|
theme_dark: Dark
|
|
theme_light: Light
|
|
theme_subtitle: Choose a preferred theme for the app
|
|
theme_system: System
|
|
theme_title: Theme
|
|
timezone: Timezone
|
|
month_start_day: Budget month starts on
|
|
month_start_day_hint: Set when your budget month starts (e.g., payday)
|
|
month_start_day_warning: Your budgets and MTD calculations will use this custom start day instead of the 1st of each month.
|
|
profiles:
|
|
destroy:
|
|
cannot_remove_self: You cannot remove yourself from the account.
|
|
member_removal_failed: There was a problem removing the member.
|
|
member_removed: Member was successfully removed.
|
|
not_authorized: You are not authorized to remove members.
|
|
show:
|
|
confirm_delete:
|
|
body: Are you sure you want to permanently delete your account? This action
|
|
is irreversible.
|
|
title: Delete account?
|
|
confirm_reset:
|
|
body: Are you sure you want to reset your account? This will delete all your accounts, categories, merchants, tags, and other data. This action cannot be undone.
|
|
title: Reset account?
|
|
confirm_reset_with_sample_data:
|
|
body: Are you sure you want to reset your account and load sample data? This will delete your existing data and replace it with demo data so you can explore Sure safely.
|
|
title: Reset account and load sample data?
|
|
confirm_remove_invitation:
|
|
body: Are you sure you want to remove the invitation for %{email}?
|
|
title: Remove Invitation
|
|
confirm_remove_member:
|
|
body: Are you sure you want to remove %{name} from your account?
|
|
title: Remove Member
|
|
danger_zone_title: Danger Zone
|
|
delete_account: Delete account
|
|
delete_account_warning: Deleting your account will permanently remove all
|
|
your data and cannot be undone.
|
|
reset_account: Reset account
|
|
reset_account_warning: Resetting your account will delete all your accounts, categories, merchants, tags, and other data, but keep your user account intact.
|
|
reset_account_with_sample_data: Reset and preload
|
|
reset_account_with_sample_data_warning: Delete all your existing data and then load fresh sample data so you can explore with a pre-filled environment.
|
|
email: Email
|
|
first_name: First Name
|
|
household_form_input_placeholder: Enter household name
|
|
household_form_label: Household name
|
|
household_subtitle: Invite family members, partners and other inviduals. Invitees
|
|
can login to your household and access your shared accounts.
|
|
household_title: Household
|
|
invitation_link: Invitation link
|
|
invite_member: Add member
|
|
last_name: Last Name
|
|
page_title: Profile Info
|
|
pending: Pending
|
|
profile_subtitle: Customize how you appear on %{product_name}
|
|
profile_title: Personal
|
|
remove_invitation: Remove Invitation
|
|
remove_member: Remove Member
|
|
save: Save
|
|
securities:
|
|
show:
|
|
page_title: Security
|
|
mfa_title: Two-Factor Authentication
|
|
mfa_description: Add an extra layer of security to your account by requiring a code from your authenticator app when signing in
|
|
enable_mfa: Enable 2FA
|
|
disable_mfa: Disable 2FA
|
|
disable_mfa_confirm: Are you sure you want to disable two-factor authentication?
|
|
sso_title: Connected Accounts
|
|
sso_subtitle: Manage your single sign-on account connections
|
|
sso_disconnect: Disconnect
|
|
sso_last_used: Last used
|
|
sso_never: Never
|
|
sso_no_email: No email
|
|
sso_no_identities: No SSO accounts connected
|
|
sso_connect_hint: Log out and sign in with an SSO provider to connect an account.
|
|
sso_confirm_title: Disconnect Account?
|
|
sso_confirm_body: Are you sure you want to disconnect your %{provider} account? You can reconnect it later by signing in with that provider again.
|
|
sso_confirm_button: Disconnect
|
|
sso_warning_message: This is your only login method. You should set a password in your security settings before disconnecting, otherwise you may be locked out of your account.
|
|
settings_nav:
|
|
accounts_label: Accounts
|
|
advanced_section_title: Advanced
|
|
ai_prompts_label: AI Prompts
|
|
api_key_label: API Key
|
|
payment_label: Payment
|
|
categories_label: Categories
|
|
feedback_label: Feedback
|
|
general_section_title: General
|
|
imports_label: Imports
|
|
exports_label: Exports
|
|
logout: Logout
|
|
merchants_label: Merchants
|
|
guides_label: Guides
|
|
other_section_title: More
|
|
preferences_label: Preferences
|
|
profile_label: Profile Info
|
|
recurring_transactions_label: Recurring
|
|
rules_label: Rules
|
|
security_label: Security
|
|
self_hosting_label: Self-Hosting
|
|
tags_label: Tags
|
|
transactions_section_title: Transactions
|
|
whats_new_label: What's new
|
|
api_keys_label: API Key
|
|
bank_sync_label: Bank Sync
|
|
settings_nav_link_large:
|
|
next: Next
|
|
previous: Back
|
|
user_avatar_field:
|
|
accepted_formats: JPG or PNG. 5MB max.
|
|
choose: Upload photo
|
|
choose_label: (optional)
|
|
change: Change photo
|
|
providers:
|
|
show:
|
|
coinbase_title: Coinbase
|
|
encryption_error:
|
|
title: Encryption Configuration Required
|
|
message: Active Record encryption keys are not configured. Please ensure the encryption credentials (active_record_encryption.primary_key, active_record_encryption.deterministic_key, and active_record_encryption.key_derivation_salt) are properly set up in your Rails credentials or environment variables before using sync providers.
|
|
coinbase_panel:
|
|
setup_instructions: "To connect Coinbase:"
|
|
step1_html: Go to <a href="https://portal.cdp.coinbase.com/projects/api-keys" target="_blank" class="text-primary underline">Coinbase API Settings</a>
|
|
step2: Create a new API key with read-only permissions (view accounts, view transactions)
|
|
step3: Copy your API key and API secret and paste them below
|
|
api_key_label: API Key
|
|
api_key_placeholder: Enter your Coinbase API key
|
|
api_secret_label: API Secret
|
|
api_secret_placeholder: Enter your Coinbase API secret
|
|
connect_button: Connect Coinbase
|
|
syncing: Syncing...
|
|
sync: Sync
|
|
disconnect_confirm: Are you sure you want to disconnect this Coinbase connection? Your synced accounts will become manual accounts.
|
|
status_connected: Coinbase is connected and syncing your crypto holdings.
|
|
status_not_connected: Not connected. Enter your API credentials above to get started.
|