mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 19:44:09 +00:00
Add support for manual recurring transaction creation (#311)
* Support manual recurring * Automatic variance calc * Automatic variance update * Tooltip for manual * Review * Fix variance calculations Manual recurring updates collapse occurrence tracking when amounts repeat * Proper Bigdecimal calcs * Fix n+1 query * Nicer UI errors. * Style --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
@@ -116,6 +116,49 @@ class TransactionsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def mark_as_recurring
|
||||
transaction = Current.family.transactions.includes(entry: :account).find(params[:id])
|
||||
|
||||
# Check if a recurring transaction already exists for this pattern
|
||||
existing = Current.family.recurring_transactions.find_by(
|
||||
merchant_id: transaction.merchant_id,
|
||||
name: transaction.merchant_id.present? ? nil : transaction.entry.name,
|
||||
currency: transaction.entry.currency,
|
||||
manual: true
|
||||
)
|
||||
|
||||
if existing
|
||||
flash[:alert] = t("recurring_transactions.already_exists")
|
||||
redirect_back_or_to transactions_path
|
||||
return
|
||||
end
|
||||
|
||||
begin
|
||||
recurring_transaction = RecurringTransaction.create_from_transaction(transaction)
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
flash[:notice] = t("recurring_transactions.marked_as_recurring")
|
||||
redirect_back_or_to transactions_path
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
flash[:alert] = t("recurring_transactions.creation_failed")
|
||||
redirect_back_or_to transactions_path
|
||||
end
|
||||
end
|
||||
rescue StandardError => e
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
flash[:alert] = t("recurring_transactions.unexpected_error")
|
||||
redirect_back_or_to transactions_path
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def per_page
|
||||
params[:per_page].to_i.positive? ? params[:per_page].to_i : 20
|
||||
|
||||
Reference in New Issue
Block a user