'After running the manual reconciliation wizard and making full reconciliation, we need to run this method to create
potentially an exchange rate entry that will balance the remaining amount_residual_currency (possibly several aml).
This ensure that all aml in the full reconciliation are reconciled (amount_residual = amount_residual_currency = 0).'

@api.model
def compute_full_after_batch_reconcile(self):

    total_debit = 0
    total_credit = 0
    total_amount_currency = 0
    currency = False
    aml_to_balance_currency = self.env['account.move.line']
    partial_rec_set = self.env['account.partial.reconcile']
    aml_id = False
    partial_rec_id = False
    maxdate = None
    for aml in self:
        total_debit += aml.debit
        total_credit += aml.credit
        if aml.amount_residual_currency:
            aml_to_balance_currency |= aml
        maxdate = max(aml.date, maxdate)
        if ((not currency) and aml.currency_id):
            currency = aml.currency_id
        if (aml.currency_id and (aml.currency_id == currency)):
            total_amount_currency += aml.amount_currency
        partial_rec_set |= (aml.matched_debit_ids | aml.matched_credit_ids)
    if (currency and aml_to_balance_currency):
        aml = aml_to_balance_currency[0]
        partial_rec = ((aml.credit and aml.matched_debit_ids[0]) or aml.matched_credit_ids[0])
        (aml_id, partial_rec_id) = partial_rec.with_context(skip_full_reconcile_check=True).create_exchange_rate_entry(aml_to_balance_currency, 0.0, total_amount_currency, currency, maxdate)
        self |= aml_id
        partial_rec_set |= partial_rec_id
        total_amount_currency += aml_id.amount_currency
    partial_rec_ids = [x.id for x in list(partial_rec_set)]
    digits_rounding_precision = self[0].company_id.currency_id.rounding
    if ((float_compare(total_debit, total_credit, precision_rounding=digits_rounding_precision) == 0) and ((not currency) or float_is_zero(total_amount_currency, precision_rounding=currency.rounding))):
        self.env['account.full.reconcile'].with_context(check_move_validity=False).create({'partial_reconcile_ids': [(6, 0, partial_rec_ids)], 'reconciled_line_ids': [(6, 0, self.ids)], 'exchange_move_id': (aml_id.move_id.id if aml_id else False), 'exchange_partial_rec_id': (partial_rec_id.id if partial_rec_id else False)})
