flectra/addons/account/static/src/js/account_payment_field.js

163 lines
5.3 KiB
JavaScript

flectra.define('account.payment', function (require) {
"use strict";
var AbstractField = require('web.AbstractField');
var core = require('web.core');
var field_registry = require('web.field_registry');
var field_utils = require('web.field_utils');
var QWeb = core.qweb;
var ShowPaymentLineWidget = AbstractField.extend({
events: _.extend({
'click .outstanding_credit_assign': '_onOutstandingCreditAssign',
}, AbstractField.prototype.events),
supportedFieldTypes: ['char'],
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* @override
* @returns {boolean}
*/
isSet: function() {
return true;
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* @private
* @override
*/
_render: function() {
var self = this;
var info = JSON.parse(this.value);
if (!info) {
this.$el.html('');
return;
}
_.each(info.content, function (k, v){
k.index = v;
k.amount = field_utils.format.float(k.amount, {digits: k.digits});
if (k.date){
k.date = field_utils.format.date(field_utils.parse.date(k.date, {}, {isUTC: true}));
}
});
this.$el.html(QWeb.render('ShowPaymentInfo', {
lines: info.content,
outstanding: info.outstanding,
title: info.title
}));
_.each(this.$('.js_payment_info'), function (k, v){
var content = info.content[v];
var options = {
content: function () {
var $content = $(QWeb.render('PaymentPopOver', {
name: content.name,
journal_name: content.journal_name,
date: content.date,
amount: content.amount,
currency: content.currency,
position: content.position,
payment_id: content.payment_id,
move_id: content.move_id,
ref: content.ref,
account_payment_id: content.account_payment_id,
invoice_id: content.invoice_id,
}));
$content.filter('.js_unreconcile_payment').on('click', self._onRemoveMoveReconcile.bind(self));
$content.filter('.js_open_payment').on('click', self._onOpenPayment.bind(self));
return $content;
},
html: true,
placement: 'left',
title: 'Payment Information',
trigger: 'focus',
delay: { "show": 0, "hide": 100 },
};
$(k).popover(options);
});
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
* @override
* @param {MouseEvent} event
*/
_onOpenPayment: function (event) {
var invoiceId = parseInt($(event.target).attr('invoice-id'));
var paymentId = parseInt($(event.target).attr('payment-id'));
var moveId = parseInt($(event.target).attr('move-id'));
var res_model;
var id;
if (invoiceId !== undefined && !isNaN(invoiceId)){
res_model = "account.invoice";
id = invoiceId;
} else if (paymentId !== undefined && !isNaN(paymentId)){
res_model = "account.payment";
id = paymentId;
} else if (moveId !== undefined && !isNaN(moveId)){
res_model = "account.move";
id = moveId;
}
//Open form view of account.move with id = move_id
if (res_model && id) {
this.do_action({
type: 'ir.actions.act_window',
res_model: res_model,
res_id: id,
views: [[false, 'form']],
target: 'current'
});
}
},
/**
* @private
* @override
* @param {MouseEvent} event
*/
_onOutstandingCreditAssign: function (event) {
var self = this;
var id = $(event.target).data('id') || false;
this._rpc({
model: 'account.invoice',
method: 'assign_outstanding_credit',
args: [JSON.parse(this.value).invoice_id, id],
}).then(function () {
self.trigger_up('reload');
});
},
/**
* @private
* @override
* @param {MouseEvent} event
*/
_onRemoveMoveReconcile: function (event) {
var self = this;
var paymentId = parseInt($(event.target).attr('payment-id'));
if (paymentId !== undefined && !isNaN(paymentId)){
this._rpc({
model: 'account.move.line',
method: 'remove_move_reconcile',
args: [paymentId, {'invoice_id': this.res_id}]
}).then(function () {
self.trigger_up('reload');
});
}
},
});
field_registry.add('payment', ShowPaymentLineWidget);
});