diff --git a/app/controllers/settings/hostings_controller.rb b/app/controllers/settings/hostings_controller.rb index 97b8de92..222ae018 100644 --- a/app/controllers/settings/hostings_controller.rb +++ b/app/controllers/settings/hostings_controller.rb @@ -26,10 +26,6 @@ class Settings::HostingsController < SettingsController Setting.synth_api_key = hosting_params[:synth_api_key] end - if hosting_params.key?(:data_enrichment_enabled) - Setting.data_enrichment_enabled = hosting_params[:data_enrichment_enabled] - end - redirect_to settings_hosting_path, notice: t(".success") rescue ActiveRecord::RecordInvalid => error flash.now[:alert] = t(".failure") @@ -38,7 +34,7 @@ class Settings::HostingsController < SettingsController private def hosting_params - params.require(:setting).permit(:render_deploy_hook, :upgrades_setting, :require_invite_for_signup, :synth_api_key, :data_enrichment_enabled) + params.require(:setting).permit(:render_deploy_hook, :upgrades_setting, :require_invite_for_signup, :synth_api_key) end def raise_if_not_self_hosted diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index beb85197..55b75581 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -41,7 +41,7 @@ class UsersController < ApplicationController def user_params params.require(:user).permit( :first_name, :last_name, :profile_image, :redirect_to, :delete_profile_image, :onboarded_at, - family_attributes: [ :name, :currency, :country, :locale, :date_format, :timezone, :id ] + family_attributes: [ :name, :currency, :country, :locale, :date_format, :timezone, :id, :data_enrichment_enabled ] ) end diff --git a/app/models/account/syncer.rb b/app/models/account/syncer.rb index 9160e64f..df5a7b03 100644 --- a/app/models/account/syncer.rb +++ b/app/models/account/syncer.rb @@ -11,7 +11,7 @@ class Account::Syncer update_account_info(balances, holdings) unless account.plaid_account_id.present? convert_records_to_family_currency(balances, holdings) unless account.currency == account.family.currency - if Setting.data_enrichment_enabled || Rails.configuration.app_mode.managed? + if account.family.data_enrichment_enabled? account.enrich_data_later else Rails.logger.info("Data enrichment is disabled, skipping enrichment for account #{account.id}") diff --git a/app/models/setting.rb b/app/models/setting.rb index fe047cbb..d576fbea 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -17,10 +17,6 @@ class Setting < RailsSettings::Base default: ENV.fetch("UPGRADES_TARGET", "release"), validates: { inclusion: { in: %w[release commit] } } - field :data_enrichment_enabled, - type: :boolean, - default: false - field :synth_api_key, type: :string, default: ENV["SYNTH_API_KEY"] field :require_invite_for_signup, type: :boolean, default: false diff --git a/app/views/settings/hostings/_data_enrichment_settings.html.erb b/app/views/settings/hostings/_data_enrichment_settings.html.erb deleted file mode 100644 index 6d409923..00000000 --- a/app/views/settings/hostings/_data_enrichment_settings.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -
-
-
-

<%= t(".title") %>

-

<%= t(".description") %>

-
- - <%= styled_form_with model: Setting.new, - url: settings_hosting_path, - method: :patch, - data: { controller: "auto-submit-form", "auto-submit-form-trigger-event-value": "blur" } do |form| %> -
- <%= form.check_box :data_enrichment_enabled, class: "sr-only peer", "data-auto-submit-form-target": "auto", "data-autosubmit-trigger-event": "input" %> - <%= form.label :data_enrichment_enabled, " ".html_safe, class: "maybe-switch" %> -
- <% end %> -
-
diff --git a/app/views/settings/hostings/show.html.erb b/app/views/settings/hostings/show.html.erb index a2af0bed..ba4b7d5d 100644 --- a/app/views/settings/hostings/show.html.erb +++ b/app/views/settings/hostings/show.html.erb @@ -10,7 +10,6 @@ <%= render "settings/hostings/upgrade_settings" %> <%= render "settings/hostings/provider_settings" %> <%= render "settings/hostings/synth_settings" %> - <%= render "settings/hostings/data_enrichment_settings" %> <% end %> diff --git a/app/views/settings/preferences/_data_enrichment_settings.html.erb b/app/views/settings/preferences/_data_enrichment_settings.html.erb new file mode 100644 index 00000000..73f729fd --- /dev/null +++ b/app/views/settings/preferences/_data_enrichment_settings.html.erb @@ -0,0 +1,24 @@ +<%# locals: (user:) %> + +
+
+
+

<%= t(".title") %>

+

<%= t(".description") %>

+ <% if self_hosted? %> +

<%= t(".self_host_disclaimer") %>

+ <% end %> +
+ + <%= styled_form_with model: user, + data: { controller: "auto-submit-form", "auto-submit-form-trigger-event-value": "blur" } do |form| %> +
+ <%= form.hidden_field :redirect_to, value: "preferences" %> + <%= form.fields_for :family do |family_form| %> + <%= family_form.check_box :data_enrichment_enabled, class: "sr-only peer", "data-auto-submit-form-target": "auto", "data-autosubmit-trigger-event": "input" %> + <%= family_form.label :data_enrichment_enabled, " ".html_safe, class: "maybe-switch" %> + <% end %> +
+ <% end %> +
+
diff --git a/app/views/settings/preferences/show.html.erb b/app/views/settings/preferences/show.html.erb index 225e5d96..8b066503 100644 --- a/app/views/settings/preferences/show.html.erb +++ b/app/views/settings/preferences/show.html.erb @@ -40,6 +40,11 @@ <% end %> <% end %> + + <%= settings_section title: t(".data"), subtitle: t(".data_subtitle") do %> + <%= render "settings/preferences/data_enrichment_settings", user: @user %> + <% end %> + <%= settings_section title: t(".theme_title"), subtitle: t(".theme_subtitle") do %>
<%= styled_form_with model: @user, class: "flex justify-between items-center" do |form| %> diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml index aa8141b8..f784db97 100644 --- a/config/locales/views/settings/en.yml +++ b/config/locales/views/settings/en.yml @@ -26,9 +26,16 @@ en: next: Next previous: Back preferences: + data_enrichment_settings: + description: Let Maybe auto-categorize, name, and add merchant data to your + transactions on each sync. All enrichment is done in English. + self_host_disclaimer: This will incur Synth API credits. + title: Transaction enrichment (English only) show: country: Country currency: Currency + data: Data enrichment + data_subtitle: Enable data enrichment for your accounts date_format: Date format general_subtitle: Configure your preferences general_title: General diff --git a/config/locales/views/settings/hostings/en.yml b/config/locales/views/settings/hostings/en.yml index b3f04fc9..90a89fd7 100644 --- a/config/locales/views/settings/hostings/en.yml +++ b/config/locales/views/settings/hostings/en.yml @@ -2,10 +2,6 @@ en: settings: hostings: - data_enrichment_settings: - description: Enable data enrichment for your account transactions. This will - incur additional Synth credits. - title: Data Enrichment invite_code_settings: description: Every new user that joins your instance of Maybe can only do so via an invite code diff --git a/db/migrate/20241217141716_add_enrichment_setting.rb b/db/migrate/20241217141716_add_enrichment_setting.rb new file mode 100644 index 00000000..8d154887 --- /dev/null +++ b/db/migrate/20241217141716_add_enrichment_setting.rb @@ -0,0 +1,5 @@ +class AddEnrichmentSetting < ActiveRecord::Migration[7.2] + def change + add_column :families, :data_enrichment_enabled, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 5fd3f26d..5ae96e52 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_12_141453) do +ActiveRecord::Schema[7.2].define(version: 2024_12_17_141716) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -222,6 +222,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_12_12_141453) do t.string "country", default: "US" t.datetime "last_synced_at" t.string "timezone" + t.boolean "data_enrichment_enabled", default: false end create_table "good_job_batches", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|