Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
210 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# -*- coding: utf-8 -*- | ||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# -*- coding: utf-8 -*- | ||
# copyright 2019 Camptocamp SA | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
{ | ||
'name': 'Structured ref auto reconcile', | ||
'version': '10.0.1.0.0', | ||
'author': "Camptocamp,Odoo Community Association (OCA)", | ||
'website': 'https://github.com/OCA/account-reconcile', | ||
'license': 'AGPL-3', | ||
'summary': 'Adds a second automatic reconciliation button,' | ||
' which is based on a structured ref', | ||
'depends': [ | ||
'account', | ||
], | ||
'data': [ | ||
'views/assets.xml', | ||
], | ||
'qweb': [ | ||
'static/src/xml/account_reconciliation.xml', | ||
], | ||
'installable': True, | ||
'auto_install': False, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# -*- coding: utf-8 -*- | ||
from . import account_bank_statement_line |
122 changes: 122 additions & 0 deletions
122
account_reconcile_structured_ref_auto/models/account_bank_statement_line.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2019 Camptocamp SA | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import models, api | ||
from odoo.exceptions import UserError | ||
|
||
|
||
class AccountBankStatementLine(models.Model): | ||
_inherit = "account.bank.statement.line" | ||
|
||
@api.multi | ||
def auto_reconcile(self): | ||
# If we don't have esr_reconcile we want the default odoo way | ||
if not self.env.context.get('struct_reconcile'): | ||
return super(AccountBankStatementLine, self).auto_reconcile() | ||
# otherwise use struct reconcile | ||
else: | ||
return self.auto_reconcile_struct() | ||
|
||
@api.multi | ||
def auto_reconcile_struct(self): | ||
""" Reconcile the Bank statement line and acount move line | ||
based on only the strctured reference | ||
""" | ||
self.ensure_one() | ||
match_recs = self.env['account.move.line'] | ||
company_currency = self.journal_id.company_id.currency_id | ||
# customized: dropped unneeded params | ||
precision = company_currency.decimal_places | ||
params = { | ||
'company_id': self.env.user.company_id.id, | ||
'account_payable_receivable': ( | ||
self.journal_id.default_credit_account_id.id, | ||
self.journal_id.default_debit_account_id.id | ||
), | ||
'partner_id': self.partner_id.id, | ||
'ref': self.name.strip(), | ||
'amount': self.amount, | ||
'precision': precision | ||
} | ||
# Try to get Structured Ref match | ||
if self.name: | ||
sql_query = self._get_sql_query() | ||
self.env.cr.execute(sql_query, params) | ||
match_recs = self.env.cr.dictfetchall() | ||
if len(match_recs) > 1: | ||
return False | ||
# Customizations done. odoo code from here on. | ||
if not match_recs: | ||
return False | ||
|
||
match_recs = self.env['account.move.line'].browse( | ||
[aml.get('id') for aml in match_recs] | ||
) | ||
# Now reconcile | ||
counterpart_aml_dicts = [] | ||
payment_aml_rec = self.env['account.move.line'] | ||
for aml in match_recs: | ||
if aml.account_id.internal_type == 'liquidity': | ||
payment_aml_rec = (payment_aml_rec | aml) | ||
else: | ||
amount = aml.currency_id and aml.amount_residual_currency \ | ||
or aml.amount_residual | ||
counterpart_aml_dicts.append({ | ||
'name': aml.name if aml.name != '/' else aml.move_id.name, | ||
'debit': amount < 0 and -amount or 0, | ||
'credit': amount > 0 and amount or 0, | ||
'move_line': aml | ||
}) | ||
|
||
try: | ||
with self._cr.savepoint(): | ||
counterpart = self.process_reconciliation( | ||
counterpart_aml_dicts=counterpart_aml_dicts, | ||
payment_aml_rec=payment_aml_rec | ||
) | ||
return counterpart | ||
except UserError: | ||
# A configuration / business logic error that makes it impossible | ||
# to auto-reconcile should not be raised | ||
# since automatic reconciliation is just an amenity and the user | ||
# will get the same exception when manually | ||
# reconciling. Other types of exception are (hopefully) | ||
# programmation errors and should cause a stacktrace. | ||
self.invalidate_cache() | ||
self.env['account.move'].invalidate_cache() | ||
self.env['account.move.line'].invalidate_cache() | ||
return False | ||
|
||
def _get_common_sql_query_ignore_partner(self): | ||
""" Selects the account move lines based on account type and company. | ||
Basequery, returns all lines matching filter clause needs to be added. | ||
""" | ||
acc_type = "acc.internal_type IN ('payable', 'receivable')" if ( | ||
self.partner_id or False | ||
) else "acc.reconcile = true" | ||
account_clause = '' | ||
if self.journal_id.default_credit_account_id and \ | ||
self.journal_id.default_debit_account_id: | ||
account_clause = "(aml.statement_id IS NULL AND aml.account_id IN \ | ||
%(account_payable_receivable)s AND aml.payment_id IS NOT NULL) OR" | ||
query = """ | ||
SELECT aml.id | ||
FROM account_move_line aml | ||
JOIN account_account acc ON acc.id = aml.account_id | ||
WHERE aml.company_id = %(company_id)s | ||
AND ({0} ( {1} AND aml.reconciled = false)) | ||
""" | ||
return query.format(account_clause, acc_type) | ||
|
||
def _get_sql_query(self): | ||
sql_query = self._get_common_sql_query_ignore_partner() + \ | ||
" AND POSITION(aml.ref in %(ref)s) > 0" \ | ||
" AND aml.ref is not null" \ | ||
" AND round(aml.amount_residual,%(precision)s)" \ | ||
" = round(%(amount)s,%(precision)s) " \ | ||
" ORDER BY" \ | ||
" date_maturity asc, aml.id asc" | ||
return sql_query |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Timon Tschanz <timon.tschanz@camptocamp.com> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
This addon adds a new auto reconciliation button, which reconciles statement lines | ||
only based on the ESR and hides the original one. This should allow for more acurate matching, though we probably match a bit less. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
To use this module following steps are required: | ||
1. Go to the Bank Statement reconciliation view | ||
2. Press the "Stuctured ref. reconciliation" button |
32 changes: 32 additions & 0 deletions
32
account_reconcile_structured_ref_auto/static/src/js/account_reconciliation.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
odoo.define('account_reconcile_structured_ref_auto.structured_ref_reconciliation', function (require) { | ||
"use strict"; | ||
|
||
var AccountReconciliation = require('account.reconciliation'); | ||
var core = require('web.core'); | ||
|
||
|
||
// Add a second button to reconcilation widget which only reconciles based on esr. | ||
AccountReconciliation.bankStatementReconciliation.include({ | ||
start: function() { | ||
var self = this; | ||
return $.when(this._super()).then(function(){ | ||
self.$el.find('.js_struct_reconciliation').click(function() { | ||
self.model_bank_statement_line | ||
.call("reconciliation_widget_auto_reconcile", | ||
[self.lines || undefined, self.num_already_reconciled_lines], | ||
{'context': {'struct_reconcile': true}} | ||
) | ||
.then(function(data){ | ||
self.serverPreprocessResultHandler(data); | ||
}) | ||
.then(function(){ | ||
self.$('.js_struct_reconciliation').hide(); | ||
return self.display_reconciliation_propositions(); | ||
}); | ||
|
||
}); | ||
|
||
}); | ||
}, | ||
}); | ||
}); |
15 changes: 15 additions & 0 deletions
15
account_reconcile_structured_ref_auto/static/src/xml/account_reconciliation.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
|
||
<templates xml:space="preserve"> | ||
|
||
<!-- abstract or shared templates --> | ||
|
||
<t t-extend="bank_statement_reconciliation"> | ||
<t t-jquery="button.js_automatic_reconciliation" t-operation="after"> | ||
<button class="btn btn-default js_struct_reconciliation pull-right" title="Let odoo try to reconcile entries for the user using esr refs">Structured ref. reconciliation</button> | ||
</t> | ||
<t t-jquery="button.js_automatic_reconciliation" t-operation="attributes"> | ||
<attribute name="style">display: none;</attribute> | ||
</t> | ||
</t> | ||
</templates> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<odoo> | ||
<template id="assets_backend" name="account assets" inherit_id="web.assets_backend"> | ||
<xpath expr="." position="inside"> | ||
<script type="text/javascript" src="/account_reconcile_structured_ref_auto/static/src/js/account_reconciliation.js"/> | ||
</xpath> | ||
</template> | ||
</odoo> |