summaryrefslogtreecommitdiff
path: root/addons/account/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/account/static/src/js')
-rw-r--r--addons/account/static/src/js/reconciliation/reconciliation_action.js19
-rw-r--r--addons/account/static/src/js/reconciliation/reconciliation_model.js56
-rw-r--r--addons/account/static/src/js/reconciliation/reconciliation_renderer.js17
3 files changed, 77 insertions, 15 deletions
diff --git a/addons/account/static/src/js/reconciliation/reconciliation_action.js b/addons/account/static/src/js/reconciliation/reconciliation_action.js
index e43667be0e4..4690f15d801 100644
--- a/addons/account/static/src/js/reconciliation/reconciliation_action.js
+++ b/addons/account/static/src/js/reconciliation/reconciliation_action.js
@@ -32,6 +32,9 @@ var StatementAction = AbstractAction.extend({
load_more: '_onLoadMore',
reload: 'reload',
},
+ events: {
+ 'change .reconciliation_search_input': '_onSearch',
+ },
config: _.extend({}, AbstractAction.prototype.config, {
// used to instantiate the model
Model: ReconciliationModel.StatementModel,
@@ -40,7 +43,7 @@ var StatementAction = AbstractAction.extend({
// used to instantiate each widget line
LineRenderer: ReconciliationRenderer.LineRenderer,
// used context params
- params: ['statement_ids'],
+ params: ['statement_line_ids'],
// number of statements/partners/accounts to display
defaultDisplayQty: 10,
// number of moves lines displayed in 'match' mode
@@ -66,12 +69,12 @@ var StatementAction = AbstractAction.extend({
// Adding values from the context is necessary to put this information in the url via the action manager so that
// you can retrieve it if the person shares his url or presses f5
_.each(params.params, function (value, name) {
- params.context[name] = name.indexOf('_ids') !== -1 ? _.map((value+'').split(), parseFloat) : value;
+ params.context[name] = name.indexOf('_ids') !== -1 ? _.map((value+'').split(','), parseFloat) : value;
});
params.params = {};
_.each(this.config.params, function (name) {
if (params.context[name]) {
- params.params[name] = name.indexOf('_ids') !== -1 && _.isArray(params.context[name]) ? params.context[name].join() : params.context[name];
+ params.params[name] = params.context[name];
}
});
},
@@ -249,6 +252,16 @@ var StatementAction = AbstractAction.extend({
}
});
},
+
+ /**
+ * @private
+ * @param {OdooEvent} ev
+ */
+ _onSearch: function (ev) {
+ var self = this;
+ ev.stopPropagation();
+ this.reload();
+ },
_onActionPartialAmount: function(event) {
var self = this;
diff --git a/addons/account/static/src/js/reconciliation/reconciliation_model.js b/addons/account/static/src/js/reconciliation/reconciliation_model.js
index 3714884473f..9f667221621 100644
--- a/addons/account/static/src/js/reconciliation/reconciliation_model.js
+++ b/addons/account/static/src/js/reconciliation/reconciliation_model.js
@@ -62,6 +62,7 @@ var _t = core._t;
* }
* [ref]: string
* [is_partially_reconciled]: boolean
+ * [to_check]: boolean
* [amount_currency_str]: string|false (amount in record currency)
* }
* mv_lines: object - idem than reconciliation_proposition
@@ -94,7 +95,7 @@ var _t = core._t;
*/
var StatementModel = BasicModel.extend({
avoidCreate: false,
- quickCreateFields: ['account_id', 'amount', 'analytic_account_id', 'label', 'tax_id', 'force_tax_included', 'analytic_tag_ids'],
+ quickCreateFields: ['account_id', 'amount', 'analytic_account_id', 'label', 'tax_id', 'force_tax_included', 'analytic_tag_ids', 'to_check'],
/**
* @override
@@ -339,14 +340,13 @@ var StatementModel = BasicModel.extend({
* - 'account.reconciliation.widget' fetch each line data
*
* @param {Object} context
- * @param {number[]} context.statement_ids
+ * @param {number[]} context.statement_line_ids
* @returns {Deferred}
*/
load: function (context) {
var self = this;
- // var statement_ids = context.statement_ids;
- this.statement_ids = context.statement_ids;
- if (!this.statement_ids) {
+ this.statement_line_ids = context.statement_line_ids;
+ if (!this.statement_line_ids) {
return $.when();
}
this.context = context;
@@ -393,14 +393,16 @@ var StatementModel = BasicModel.extend({
self.alreadyDisplayed = [];
self.lines = {};
self.pagerIndex = 0;
+ self.search_str = $('.reconciliation_search_input').val()
var def_statement = this._rpc({
model: 'account.reconciliation.widget',
method: 'get_bank_statement_data',
- args: [self.statement_ids],
+ kwargs: {"bank_statement_line_ids":self.statement_line_ids, "search_str":self.search_str},
+ context: self.context,
})
.then(function (statement) {
self.statement = statement;
- self.bank_statement_id = self.statement_ids.length === 1 ? {id: self.statement_ids[0], display_name: statement.statement_name} : false;
+ self.bank_statement_id = self.statement_line_ids.length === 1 ? {id: self.statement_line_ids[0], display_name: statement.statement_name} : false;
self.valuenow = self.valuenow || statement.value_min;
self.valuemax = self.valuemax || statement.value_max;
self.context.journal_id = statement.journal_id;
@@ -486,11 +488,18 @@ var StatementModel = BasicModel.extend({
quickCreateProposition: function (handle, reconcileModelId) {
var line = this.getLine(handle);
var reconcileModel = _.find(this.reconcileModels, function (r) {return r.id === reconcileModelId;});
- var fields = ['account_id', 'amount', 'amount_type', 'analytic_account_id', 'journal_id', 'label', 'force_tax_included', 'tax_id', 'analytic_tag_ids'];
+ var fields = ['account_id', 'amount', 'amount_type', 'analytic_account_id', 'journal_id', 'label', 'force_tax_included', 'tax_id', 'analytic_tag_ids', 'to_check'];
this._blurProposition(handle);
var focus = this._formatQuickCreate(line, _.pick(reconcileModel, fields));
focus.reconcileModelId = reconcileModelId;
+ if (!line.reconciliation_proposition.every(function(prop) {return prop.to_check == focus.to_check})) {
+ new CrashManager().show_warning({data: {
+ exception_type: _t("Incorrect Operation"),
+ message: _t("You cannot mix items with and without the 'To Check' checkbox ticked.")
+ }});
+ return $.when();
+ }
line.reconciliation_proposition.push(focus);
if (reconcileModel.has_second_line) {
@@ -615,6 +624,14 @@ var StatementModel = BasicModel.extend({
prop = this._formatQuickCreate(line);
line.reconciliation_proposition.push(prop);
}
+ if (!line.reconciliation_proposition.slice(0,-1).every(function(prop) {return prop.to_check == values.to_check})) {
+ new CrashManager().show_warning({data: {
+ exception_type: _t("Incorrect Operation"),
+ message: _t("You cannot mix items with and without the 'To Check' checkbox ticked.")
+ }});
+ $('.create_to_check input').click();
+ return $.when();
+ }
_.each(values, function (value, fieldName) {
if (fieldName === 'analytic_tag_ids') {
switch (value.operation) {
@@ -708,6 +725,15 @@ var StatementModel = BasicModel.extend({
return isNaN(prop.id) && prop.display;
}), self._formatToProcessReconciliation.bind(self, line)),
};
+ line.reconciliation_proposition.some(function(prop) {
+ if (prop.to_check) {
+ values_dict['to_check'] = true;
+ return true;
+ }
+ })
+ if (line.reconciliation_proposition[0].to_check) {
+ values_dict['to_check'] = true;
+ }
// If the lines are not fully balanced, create an unreconciled amount.
// line.st_line.currency_id is never false here because its equivalent to
@@ -733,6 +759,7 @@ var StatementModel = BasicModel.extend({
model: 'account.reconciliation.widget',
method: 'process_bank_statement_line',
args: [ids, values],
+ context: self.context,
})
.then(function () {
return {handles: handles};
@@ -1019,6 +1046,16 @@ var StatementModel = BasicModel.extend({
.then(function(){
return data.write_off ? self.quickCreateProposition(line.handle, data.model_id) : true;
})
+ .then(function() {
+ // If still no partner set, take the one from context, if it exists
+ if (!line.st_line.partner_id && self.context.partner_id && self.context.partner_name) {
+ return self.changePartner(line.handle, {
+ 'id': self.context.partner_id,
+ 'display_name': self.context.partner_name,
+ }, true);
+ }
+ return true;
+ })
);
});
return $.when.apply($, defs);
@@ -1090,6 +1127,7 @@ var StatementModel = BasicModel.extend({
'link': values.link,
'display': true,
'invalid': true,
+ 'to_check': values.to_check,
'__tax_to_recompute': true,
'is_tax': values.is_tax,
'__focus': '__focus' in values ? values.__focus : true,
@@ -1235,7 +1273,7 @@ var StatementModel = BasicModel.extend({
* datas allowing manual reconciliation
*/
var ManualModel = StatementModel.extend({
- quickCreateFields: ['account_id', 'journal_id', 'amount', 'analytic_account_id', 'label', 'tax_id', 'force_tax_included', 'analytic_tag_ids', 'date'],
+ quickCreateFields: ['account_id', 'journal_id', 'amount', 'analytic_account_id', 'label', 'tax_id', 'force_tax_included', 'analytic_tag_ids', 'date', 'to_check'],
//--------------------------------------------------------------------------
// Public
diff --git a/addons/account/static/src/js/reconciliation/reconciliation_renderer.js b/addons/account/static/src/js/reconciliation/reconciliation_renderer.js
index 23c680ddcda..abc5a5aa2e8 100644
--- a/addons/account/static/src/js/reconciliation/reconciliation_renderer.js
+++ b/addons/account/static/src/js/reconciliation/reconciliation_renderer.js
@@ -66,7 +66,9 @@ var StatementRenderer = Widget.extend(FieldManagerMixin, {
}
this.$('h1.statement_name').text(this._initialState.title || _t('No Title'));
-
+ if (this.model.context && this.model.context.args && this.model.context.args.search) {
+ this.$('.reconciliation_search_input').val(self.model.context.args.search);
+ }
return $.when.apply($, defs);
},
/**
@@ -335,9 +337,11 @@ var LineRenderer = Widget.extend(FieldManagerMixin, {
update: function (state) {
var self = this;
// isValid
- this.$('caption .o_buttons button.o_validate').toggleClass('d-none', !!state.balance.type);
- this.$('caption .o_buttons button.o_reconcile').toggleClass('d-none', state.balance.type <= 0);
+ var to_check_checked = !!(state.reconciliation_proposition[0] && state.reconciliation_proposition[0].to_check);
+ this.$('caption .o_buttons button.o_validate').toggleClass('d-none', !!state.balance.type && !to_check_checked);
+ this.$('caption .o_buttons button.o_reconcile').toggleClass('d-none', state.balance.type <= 0 || to_check_checked);
this.$('caption .o_buttons .o_no_valid').toggleClass('d-none', state.balance.type >= 0);
+ self.$('caption .o_buttons button.o_validate').toggleClass('text-warning', to_check_checked);
// partner_id
this._makePartnerRecord(state.st_line.partner_id, state.st_line.partner_name).then(function (recordID) {
@@ -545,6 +549,9 @@ var LineRenderer = Widget.extend(FieldManagerMixin, {
}, {
type: 'char', //TODO is it a bug or a feature when type date exists ?
name: 'date',
+ }, {
+ type: 'boolean',
+ name: 'to_check',
}], {
account_id: {string: _t("Account")},
label: {string: _t("Label")},
@@ -580,6 +587,9 @@ var LineRenderer = Widget.extend(FieldManagerMixin, {
self.fields.date = new basic_fields.FieldDate(self,
'date', record, {mode: 'edit'});
+ self.fields.to_check = new basic_fields.FieldBoolean(self,
+ 'to_check', record, {mode: 'edit'});
+
var $create = $(qweb.render("reconciliation.line.create", {'state': state}));
self.fields.account_id.appendTo($create.find('.create_account_id .o_td_field'))
.then(addRequiredStyle.bind(self, self.fields.account_id));
@@ -593,6 +603,7 @@ var LineRenderer = Widget.extend(FieldManagerMixin, {
self.fields.amount.appendTo($create.find('.create_amount .o_td_field'))
.then(addRequiredStyle.bind(self, self.fields.amount));
self.fields.date.appendTo($create.find('.create_date .o_td_field'))
+ self.fields.to_check.appendTo($create.find('.create_to_check .o_td_field'))
self.$('.create').append($create);
function addRequiredStyle(widget) {