163 lines
5.3 KiB
JavaScript
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);
|
|
|
|
});
|