summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqdp-odoo <qdp@odoo.com>2015-03-23 10:49:04 +0100
committerqdp-odoo <qdp@odoo.com>2015-03-23 10:53:08 +0100
commitc8ea6cf5305d837a035235129ee3da2f386d829c (patch)
treeb1ff54a30ecefa1e98994c4e85db56a7a236bbe6
parent1a3efc5da7b68b0103af9a2402a8049ec4cf14f8 (diff)
[IMP] account: bank statement processing now allow partial reconciliation on the last invoice selected (not only on the first).
-rw-r--r--addons/account/account_bank_statement.py12
-rw-r--r--addons/account/static/src/js/widgets.js25
2 files changed, 15 insertions, 22 deletions
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index a877dd15f17..8493bcebe24 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -588,20 +588,16 @@ class account_bank_statement_line(osv.osv):
if not st_line.partner_id.id:
return []
- # Look for a set of move line whose amount is <= to the line's amount
+ # Select move lines until their total amount is greater than the statement line amount
domain += [('account_id.type', 'in', ((amount > 0 and 'receivable' or 'payable'), 'liquidity'))] # Make sure we can't mix receivable and payable
- if amount_field == 'amount_currency' and amount < 0:
- domain += [(amount_field, '<', 0), (amount_field, '>', (sign * amount))]
- else:
- domain += [(amount_field, '>', 0), (amount_field, '<', (sign * amount))]
+ domain += (amount_field == 'amount_currency' and amount < 0) and [(amount_field, '<', 0)] or [(amount_field, '>', 0)]
mv_lines = self.get_move_lines_for_reconciliation(cr, uid, st_line, excluded_ids=excluded_ids, limit=5, additional_domain=domain)
ret = []
total = 0
for line in mv_lines:
total += abs(line['debit'] - line['credit'])
- if float_compare(total, abs(amount), precision_digits=precision_digits) != 1:
- ret.append(line)
- else:
+ ret.append(line)
+ if float_compare(total, abs(amount), precision_digits=precision_digits) != -1:
break
return ret
diff --git a/addons/account/static/src/js/widgets.js b/addons/account/static/src/js/widgets.js
index dab4b98860a..8e57c499092 100644
--- a/addons/account/static/src/js/widgets.js
+++ b/addons/account/static/src/js/widgets.js
@@ -1348,12 +1348,13 @@ var bankStatementReconciliationLine = Widget.extend({
// Show or hide partial reconciliation
if (self.get("mv_lines_selected").length > 0) {
+ var last_line = _.last(self.get("mv_lines_selected"));
var propose_partial = self.getCreatedLines().length === 0
- && self.get("mv_lines_selected").length === 1
&& balance_type === "greater"
- && ! self.get("mv_lines_selected")[0].partial_reconcile
+ && Math.abs(self.get("balance")) < Math.abs(last_line.debit - last_line.credit)
+ && ! last_line.partial_reconcile
&& ! self.is_rapprochement;
- self.get("mv_lines_selected")[0].propose_partial_reconcile = propose_partial;
+ last_line.propose_partial_reconcile = propose_partial;
self.updateAccountingViewMatchedLines();
}
@@ -1452,7 +1453,13 @@ var bankStatementReconciliationLine = Widget.extend({
mvLinesSelectedChanged: function(elt, val) {
var self = this;
-
+
+ // Reset partial reconciliation
+ _.each(self.get("mv_lines_selected"), function(line) {
+ if (line.partial_reconcile === true) self.unpartialReconcileLine(line);
+ if (line.propose_partial_reconcile === true) line.propose_partial_reconcile = false;
+ });
+
var added_lines = _.difference(val.newValue, val.oldValue);
var removed_lines = _.difference(val.oldValue, val.newValue);
@@ -1600,16 +1607,6 @@ var bankStatementReconciliationLine = Widget.extend({
updateBalance: function() {
var self = this;
var mv_lines_selected = self.get("mv_lines_selected");
- var lines_selected_num = mv_lines_selected.length;
-
- // Undo partial reconciliation if necessary
- if (lines_selected_num !== 1) {
- _.each(mv_lines_selected, function(line) {
- if (line.partial_reconcile === true) self.unpartialReconcileLine(line);
- if (line.propose_partial_reconcile === true) line.propose_partial_reconcile = false;
- });
- self.updateAccountingViewMatchedLines();
- }
// Compute balance
var balance = 0;