diff --git a/app/controllers/backend/quick_affairs_controller.rb b/app/controllers/backend/quick_affairs_controller.rb index dd53c2de84..6945851514 100644 --- a/app/controllers/backend/quick_affairs_controller.rb +++ b/app/controllers/backend/quick_affairs_controller.rb @@ -53,7 +53,7 @@ def create return render :new end - lettered = lettrable? && @payment.letter_with(@bank_statement_items) + lettered = @amount == @trade.amount && @payment.letter_with(@bank_statement_items) if lettered && @bank_statement_items notify_warning :saved_but_couldnt_letter_x_and_y.tl(trade: self.class::Trade.model_name.human, payment: self.class::Payment.model_name.human) end @@ -108,14 +108,5 @@ def affair_params :third_id, :payment_id end - - def lettrable? - return false unless @bank_statement_items - bank_statement = @bank_statement_items.first.bank_statement - amount_matches = (@amount == @payment.amount) - amount_matches &&= (@amount == @trade.amount) - mode_is_valid = (bank_statement.cash_id == @payment.mode.cash_id) - amount_matches && mode_is_valid - end end end diff --git a/app/models/incoming_payment.rb b/app/models/incoming_payment.rb index e4bd208b96..328d1f94cc 100644 --- a/app/models/incoming_payment.rb +++ b/app/models/incoming_payment.rb @@ -166,8 +166,16 @@ def third end def letter_with(bank_statements_items) + return false unless bank_statements_items.present? return false unless journal_entry bank_statement = bank_statements_items.first.bank_statement + return false unless mode.cash_id == bank_statement.cash_id + unless bank_statements_items.respond_to?(:pluck) + ids = bank_statements_items.map { |item| item.respond_to?(:id) ? item.id : item } + bank_statements_items = BankStatementItem.where(id: ids) + end + matches = amount == bank_statements_items.sum(:debit) - bank_statements_items.sum(:credit) + return false unless matches letters = bank_statements_items.pluck(:letter) bank_statements_items.update_all(letter: nil) JournalEntryItem.pointed_by(bank_statement) @@ -179,6 +187,7 @@ def letter_with(bank_statements_items) .where(account_id: bank_statement.cash_account_id) .update_all(bank_statement_id: bank_statement.id, bank_statement_letter: letter) bank_statements_items.update_all(letter: letter) + letter end # Returns true if payment is already deposited diff --git a/app/models/outgoing_payment.rb b/app/models/outgoing_payment.rb index 0a3e55a5fa..58fdc72151 100644 --- a/app/models/outgoing_payment.rb +++ b/app/models/outgoing_payment.rb @@ -110,8 +110,16 @@ def third end def letter_with(bank_statements_items) + return false unless bank_statements_items.present? return false unless journal_entry bank_statement = bank_statements_items.first.bank_statement + return false unless mode.cash_id == bank_statement.cash_id + unless bank_statements_items.respond_to?(:pluck) + ids = bank_statements_items.map { |item| item.respond_to?(:id) ? item.id : item } + bank_statements_items = BankStatementItem.where(id: ids) + end + matches = amount == bank_statements_items.sum(:credit) - bank_statements_items.sum(:debit) + return false unless matches letters = bank_statements_items.pluck(:letter) bank_statements_items.update_all(letter: nil) JournalEntryItem.pointed_by(bank_statement) @@ -123,6 +131,7 @@ def letter_with(bank_statements_items) .where(account_id: bank_statement.cash_account_id) .update_all(bank_statement_id: bank_statement.id, bank_statement_letter: letter) bank_statements_items.update_all(letter: letter) + letter end def check_updateable_or_destroyable?