summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorArthur Maniet <me@whisno.be>2014-12-05 15:10:32 +0100
committerArthur Maniet <me@whisno.be>2014-12-11 17:18:16 +0100
commit562fc998bf841f78698bb8006a6ef1d84ff03fc3 (patch)
treecf925e3c5b11401db9bb84511fab1b0c708a9b0b /addons
parentc3de121988987575d55490afe50ded38c1d18a4e (diff)
[IMP/FIX] account: bank statement reconciliation widget: adopt a more logical approach to reconciliation balancing, as explained in https://github.com/odoo/odoo/issues/4017#issuecomment-66599534
Fixes #4017
Diffstat (limited to 'addons')
-rw-r--r--addons/account/static/src/css/account_bank_statement_reconciliation.css11
-rw-r--r--addons/account/static/src/css/account_bank_statement_reconciliation.scss13
-rw-r--r--addons/account/static/src/js/account_widgets.js97
-rw-r--r--addons/account/static/src/xml/account_bank_statement_reconciliation.xml3
4 files changed, 67 insertions, 57 deletions
diff --git a/addons/account/static/src/css/account_bank_statement_reconciliation.css b/addons/account/static/src/css/account_bank_statement_reconciliation.css
index 6ce216410e7..50202d15848 100644
--- a/addons/account/static/src/css/account_bank_statement_reconciliation.css
+++ b/addons/account/static/src/css/account_bank_statement_reconciliation.css
@@ -220,10 +220,14 @@
padding-bottom: 3px; }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption {
text-align: left;
- font-size: 1.1em;
- font-weight: bold;
height: 26px;
margin: 0 15px 4px 15px; }
+ .openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption .partner_name {
+ font-size: 1.1em;
+ font-weight: bold; }
+ .openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption .tip_reconciliation_not_balanced {
+ float: right;
+ padding-right: 7px; }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption button {
float: right; }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption button:disabled {
@@ -231,8 +235,7 @@
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption > span, .openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view caption > input {
position: relative;
top: 7px;
- /* meh */
- font-weight: bold; }
+ /* meh */ }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .accounting_view td.cell_credit {
border-left: 1px solid #000; }
.openerp .oe_bank_statement_reconciliation .oe_bank_statement_reconciliation_line .match .match_controls {
diff --git a/addons/account/static/src/css/account_bank_statement_reconciliation.scss b/addons/account/static/src/css/account_bank_statement_reconciliation.scss
index ced682034a6..c52be9263da 100644
--- a/addons/account/static/src/css/account_bank_statement_reconciliation.scss
+++ b/addons/account/static/src/css/account_bank_statement_reconciliation.scss
@@ -362,11 +362,19 @@ $aestetic_animation_speed: 300ms;
caption {
text-align: left;
- font-size: 1.1em;
- font-weight: bold;
height: 26px;
margin: 0 $actionColWidth 4px $actionColWidth;
+ .partner_name {
+ font-size: 1.1em;
+ font-weight: bold;
+ }
+
+ .tip_reconciliation_not_balanced {
+ float: right;
+ padding-right: 7px;
+ }
+
button {
float: right;
@@ -377,7 +385,6 @@ $aestetic_animation_speed: 300ms;
> span, > input {
position: relative; top: 7px; /* meh */
- font-weight: bold;
}
}
diff --git a/addons/account/static/src/js/account_widgets.js b/addons/account/static/src/js/account_widgets.js
index 1b26a2a094f..ce9be4793fa 100644
--- a/addons/account/static/src/js/account_widgets.js
+++ b/addons/account/static/src/js/account_widgets.js
@@ -1246,50 +1246,62 @@ openerp.account = function (instance) {
/** Properties changed */
- // Updates the validation button and the "open balance" line
+ // Updates the validation button, the "open balance" line and the partial reconciliation sign
balanceChanged: function() {
var self = this;
- var balance = self.get("balance");
+
+ // 'reset' the widget to invalid state
+ self.is_valid = false;
+ self.$(".tip_reconciliation_not_balanced").show();
self.$(".tbody_open_balance").empty();
- // Special case hack : no identified partner
- if (self.st_line.has_no_partner) {
- if (Math.abs(balance).toFixed(3) === "0.000") {
- self.$(".button_ok").addClass("oe_highlight");
- self.$(".button_ok").removeAttr("disabled");
- self.$(".button_ok").text("OK");
- self.is_valid = true;
+ self.$(".button_ok").text("OK").removeClass("oe_highlight").attr("disabled", "disabled");
+
+ // Find out if the counterpart is lower than, equal or greater than the transaction being reconciled
+ var balance_type = undefined;
+ if (Math.abs(self.get("balance")).toFixed(3) === "0.000") balance_type = "equal";
+ else if (self.get("balance") * self.st_line.amount > 0) balance_type = "greater";
+ else if (self.get("balance") * self.st_line.amount < 0) balance_type = "lower";
+
+ // Adjust to different cases
+ if (balance_type === "equal") {
+ displayValidState(true);
+ } else if (balance_type === "greater") {
+ createOpenBalance("Create Write-off");
+ } else if (balance_type === "lower") {
+ if (self.st_line.has_no_partner) {
+ createOpenBalance("Choose counterpart");
} else {
- self.$(".button_ok").removeClass("oe_highlight");
- self.$(".button_ok").attr("disabled", "disabled");
- self.$(".button_ok").text("OK");
- self.is_valid = false;
- var debit = (balance > 0 ? self.formatCurrency(balance, self.st_line.currency_id) : "");
- var credit = (balance < 0 ? self.formatCurrency(-1*balance, self.st_line.currency_id) : "");
- var $line = $(QWeb.render("bank_statement_reconciliation_line_open_balance", {
- debit: debit,
- credit: credit,
- account_code: self.map_account_id_code[self.st_line.open_balance_account_id]
- }));
- $line.find('.js_open_balance')[0].innerHTML = _t("Choose counterpart");
- self.$(".tbody_open_balance").append($line);
+ displayValidState(false, "Keep open");
+ createOpenBalance("Open balance");
}
- return;
}
-
- if (Math.abs(balance).toFixed(3) === "0.000") {
- self.$(".button_ok").addClass("oe_highlight");
- self.$(".button_ok").text("OK");
- } else {
- self.$(".button_ok").removeClass("oe_highlight");
- self.$(".button_ok").text("Keep open");
- var debit = (balance > 0 ? self.formatCurrency(balance, self.st_line.currency_id) : "");
- var credit = (balance < 0 ? self.formatCurrency(-1*balance, self.st_line.currency_id) : "");
+
+ // Show or hide partial reconciliation
+ if (self.get("mv_lines_selected").length > 0) {
+ 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;
+ self.get("mv_lines_selected")[0].propose_partial_reconcile = propose_partial;
+ self.updateAccountingViewMatchedLines();
+ }
+
+ function displayValidState(higlight_ok_button, ok_button_text) {
+ self.is_valid = true;
+ self.$(".tip_reconciliation_not_balanced").hide();
+ self.$(".button_ok").removeAttr("disabled");
+ if (higlight_ok_button) self.$(".button_ok").addClass("oe_highlight");
+ if (ok_button_text !== undefined) self.$(".button_ok").text(ok_button_text)
+ }
+
+ function createOpenBalance(name) {
+ var balance = self.get("balance");
+ var amount = self.formatCurrency(Math.abs(balance), self.st_line.currency_id);
var $line = $(QWeb.render("bank_statement_reconciliation_line_open_balance", {
- debit: debit,
- credit: credit,
+ debit: balance > 0 ? amount : "",
+ credit: balance < 0 ? amount : "",
account_code: self.map_account_id_code[self.st_line.open_balance_account_id]
}));
- self.$(".tbody_open_balance").append($line);
+ if (name !== undefined)
+ $line.find(".cell_label").text(name);
+ self.$(".tbody_open_balance").empty().append($line);
}
},
@@ -1532,21 +1544,8 @@ openerp.account = function (instance) {
});
// Dealing with floating-point
balance = Math.round(balance*1000)/1000;
+
self.set("balance", balance);
-
- // Propose partial reconciliation if necessary
- if (self.getCreatedLines().length === 0 &&
- lines_selected_num === 1 &&
- self.st_line.amount * balance > 0 &&
- self.st_line.amount * (mv_lines_selected[0].debit - mv_lines_selected[0].credit) < 0 &&
- ! mv_lines_selected[0].partial_reconcile) {
-
- mv_lines_selected[0].propose_partial_reconcile = true;
- self.updateAccountingViewMatchedLines();
- } else if (lines_selected_num === 1) {
- mv_lines_selected[0].propose_partial_reconcile = false;
- self.updateAccountingViewMatchedLines();
- }
},
// Loads move lines according to the widget's state
diff --git a/addons/account/static/src/xml/account_bank_statement_reconciliation.xml b/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
index 1a0653494b7..603f158b2db 100644
--- a/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
+++ b/addons/account/static/src/xml/account_bank_statement_reconciliation.xml
@@ -64,6 +64,7 @@
<table class="accounting_view">
<caption>
<button class="button_ok"></button>
+ <span class="tip_reconciliation_not_balanced">You must balance the reconciliation</span>
<span t-if="! line.has_no_partner" class="partner_name">
<t t-esc="line.partner_name"/>
<span class="change_partner glyphicon glyphicon-pencil"></span>
@@ -190,7 +191,7 @@
<td class="cell_action"><span class="toggle_create glyphicon glyphicon-play"></span></td>
<td class="cell_account_code"><t t-esc="account_code"/></td>
<td class="cell_due_date"></td>
- <td class="cell_label js_open_balance">Open balance</td>
+ <td class="cell_label">Open balance</td>
<td class="cell_debit"><t t-esc="debit"/></td>
<td class="cell_credit"><t t-esc="credit"/></td>
<td class="cell_info_popover"></td>