1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-04 21:15:19 +02:00

Update properties controller to use new creational and update balance methods

This commit is contained in:
Zach Gollwitzer 2025-07-09 22:28:07 -04:00
parent d459ebdad8
commit 25f0c78c47
17 changed files with 500 additions and 144 deletions

View file

@ -1,31 +1,49 @@
class PropertiesController < ApplicationController
include AccountableResource, StreamExtensions
before_action :set_property, only: [ :balances, :address, :update_balances, :update_address ]
before_action :set_property, only: [ :edit, :update, :details, :update_details, :address, :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")
@account = Current.family.create_property_account!(
name: property_params[:name],
current_value: property_params[:current_estimated_value].to_d,
purchase_price: property_params[:purchase_price].present? ? property_params[:purchase_price].to_d : nil,
purchase_date: property_params[:purchase_date],
currency: property_params[:currency] || Current.family.currency,
draft: true
)
redirect_to balances_property_path(@account)
redirect_to details_property_path(@account)
end
def update
if @account.update(property_params)
form = Account::OverviewForm.new(
account: @account,
name: property_params[:name],
currency: property_params[:currency],
opening_balance: property_params[:purchase_price],
opening_cash_balance: property_params[:purchase_price].present? ? "0" : nil,
opening_date: property_params[:purchase_date],
current_balance: property_params[:current_estimated_value],
current_cash_balance: property_params[:current_estimated_value].present? ? "0" : nil
)
result = form.save
if result.success?
@success_message = "Property details updated successfully."
if @account.active?
render :edit
else
redirect_to balances_property_path(@account)
redirect_to details_property_path(@account)
end
else
@error_message = "Unable to update property details."
@error_message = result.error || "Unable to update property details."
render :edit, status: :unprocessable_entity
end
end
@ -33,26 +51,25 @@ class PropertiesController < ApplicationController
def edit
end
def balances
def details
end
def update_balances
result = @account.update_balance(balance: balance_params[:balance], currency: balance_params[:currency])
if result.success?
@success_message = result.updated? ? "Balance updated successfully." : "No changes made. Account is already up to date."
def update_details
if @account.update(details_params)
@success_message = "Property details updated successfully."
if @account.active?
render :balances
render :details
else
redirect_to address_property_path(@account)
end
else
@error_message = result.error_message
render :balances, status: :unprocessable_entity
@error_message = "Unable to update property details."
render :details, status: :unprocessable_entity
end
end
def address
@property = @account.property
@property.address ||= Address.new
@ -78,8 +95,9 @@ class PropertiesController < ApplicationController
end
private
def balance_params
params.require(:account).permit(:balance, :currency)
def details_params
params.require(:account)
.permit(:subtype, accountable_attributes: [ :id, :year_built, :area_unit, :area_value ])
end
def address_params
@ -89,7 +107,9 @@ class PropertiesController < ApplicationController
def property_params
params.require(:account)
.permit(:name, :subtype, :accountable_type, accountable_attributes: [ :id, :year_built, :area_unit, :area_value ])
.permit(:name, :currency, :purchase_price, :purchase_date, :current_estimated_value,
:subtype, :accountable_type,
accountable_attributes: [ :id, :year_built, :area_unit, :area_value ])
end
def set_property