mirror of
https://github.com/we-promise/sure.git
synced 2026-04-27 16:04:10 +00:00
The subtype attribute was moved from Account to individual accountable models to enable users to select specific subtypes during SimpleFin account import. This change allows for better account categorization and more precise display of account types (e.g., "HSA" instead of generic "Cash"). However, tests and the PlaidAccount processor weren't updated to work with the new delegation pattern. This commit fixes: - PlaidAccount::Processor now sets subtype on accountable and uses enrichable pattern to respect user locks - PropertiesController updated to handle subtype via accountable_attributes - Test fixtures corrected to set subtype on accountable models not Account - Tests updated to work with the delegated subtype pattern All originally failing tests now pass: - PropertiesControllerTest#test_updates_property_overview - PlaidAccount::ProcessorTest (2 failing tests) - AccountTest#test_gets_short/long_subtype_label
100 lines
2.5 KiB
Ruby
100 lines
2.5 KiB
Ruby
class PropertiesController < ApplicationController
|
|
include AccountableResource, StreamExtensions
|
|
|
|
before_action :set_property, only: [ :balances, :address, :update_balances, :update_address ]
|
|
|
|
def new
|
|
@account = Current.family.accounts.build(accountable: Property.new)
|
|
end
|
|
|
|
def create
|
|
@account = Current.family.accounts.create!(
|
|
property_params.merge(currency: Current.family.currency, balance: 0, status: "draft")
|
|
)
|
|
|
|
redirect_to balances_property_path(@account)
|
|
end
|
|
|
|
def update
|
|
if @account.update(property_params)
|
|
@success_message = "Property details updated successfully."
|
|
|
|
if @account.active?
|
|
render :edit
|
|
else
|
|
redirect_to balances_property_path(@account)
|
|
end
|
|
else
|
|
@error_message = "Unable to update property details."
|
|
render :edit, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def balances
|
|
end
|
|
|
|
def update_balances
|
|
result = @account.set_current_balance(balance_params[:balance].to_d)
|
|
|
|
if result.success?
|
|
@success_message = "Balance updated successfully."
|
|
|
|
if @account.active?
|
|
render :balances
|
|
else
|
|
redirect_to address_property_path(@account)
|
|
end
|
|
else
|
|
@error_message = result.error_message
|
|
render :balances, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def address
|
|
@property = @account.property
|
|
@property.address ||= Address.new
|
|
end
|
|
|
|
def update_address
|
|
if @account.property.update(address_params)
|
|
if @account.draft?
|
|
@account.activate!
|
|
|
|
respond_to do |format|
|
|
format.html { redirect_to account_path(@account) }
|
|
format.turbo_stream { stream_redirect_to account_path(@account) }
|
|
end
|
|
else
|
|
@success_message = "Address updated successfully."
|
|
render :address
|
|
end
|
|
else
|
|
@error_message = "Unable to update address. Please check the required fields."
|
|
render :address, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
private
|
|
def balance_params
|
|
params.require(:account).permit(:balance, :currency)
|
|
end
|
|
|
|
def address_params
|
|
params.require(:property)
|
|
.permit(address_attributes: [ :line1, :line2, :locality, :region, :country, :postal_code ])
|
|
end
|
|
|
|
def property_params
|
|
params.require(:account)
|
|
.permit(:name, :accountable_type, accountable_attributes: [ :id, :subtype, :year_built, :area_unit, :area_value ])
|
|
end
|
|
|
|
def set_property
|
|
@account = Current.family.accounts.find(params[:id])
|
|
@property = @account.property
|
|
end
|
|
end
|