(function() {
openerp.widgetInstanceStatementTransfer = null;
openerp.parentInstanceStatementTransfer = {};
var QWeb = openerp.web.qweb;
var instanceWeb = openerp.web;
openerp.EiruStatementTransfer = openerp.Widget.extend({
template: 'EiruStatementUtility.Transfer',
id: undefined,
buttons: undefined,
bankStatement: [],
accountJournal :[],
statementOpen: [],
/** config */
statementConfig: [],
resUser: [],
statementUser: [],
/* init */
init: function(parent) {
this._super(parent);
this.buttons = parent.$buttons;
},
/* start */
start: function () {
var self = this
this.$el.click(function() {
self.fetchInitial();
});
self.buttons.click(function(e) {
/* C (Crear) */
if (e.target.accessKey === 'C')
self.$el.css('display','none');
/* E (Editar) */
if (e.target.accessKey === 'E')
self.$el.css('display','none');
/* S (Guarrdar) */
if (e.target.accessKey === 'S')
self.$el.css('display','flex');
/* D (Cancelar) */
if (e.target.accessKey === 'D')
self.$el.css('display','flex');
});
},
/* Actualizar Id de la visat actual */
updateId: function(id) {
var self = this;
self.id = id;
},
/* Reload Page*/
reloadPage: function() {
openerp.parentInstanceStatementTransfer.reload();
},
/* Description: Función para remover el modal */
removeModal: function() {
$('.expired-account-modal').remove();
$('.modal-backdrop').remove();
},
/*Get User*/
fetchGetUserLogin: function(){
var bankStatementUser = new instanceWeb.Model('account.bank.statement');
return bankStatementUser.call('eiru_transfers_get_user', {
context: new instanceWeb.CompoundContext()
});
},
/* statement Config */
fetchStatementConfigTransfer: function() {
var fields = ['id','name','transfer_user_ids','transfer_statement_ids','transfer_negative_amount'];
var domain = [['active', '=', true]];
var statementConfig = new openerp.web.Model('account.bank.statement.config');
return statementConfig.query(fields).filter(domain).all();
},
/* Método inicial */
fetchInitial: function() {
var self = this;
self.fetchBankStatement(self.id).then(function(bankStatement) {
return bankStatement;
}).then(function(bankStatement) {
self.bankStatement = bankStatement;
return self.fetchStatementConfigTransfer();
}).then(function(statementConfig){
self.statementConfig = statementConfig;
return self.fetchGetUserLogin();
}).then(function(resUser) {
self.resUser = resUser;
if (!self.statementConfig.length){
instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia, no existe configuración de caja.");
return false;
}
if (!self.resUser.length) {
instanceWeb.notification.do_warn("Atencion", "No estas autorizado a realizar transferencia.");
return false;
}
// if (!!self.statementConfig.length && !!self.resUser.length && !!self.bankStatement.length) {
if (!!self.bankStatement.length) {
var statementConfig = self.statementConfig[0];
var resUser = self.resUser[0];
var statementUser = self.bankStatement[0];
/* Verificar si el tipo caja tiene permiso para la transferencia */
if (!(_.contains(statementConfig.transfer_statement_ids, statementUser.typeStatement))) {
instanceWeb.notification.do_warn("Atencion", "El tipo de caja no tiene autorización para realizar transferencia.");
return false;
}
/* Verificar si el usuario tiene permiso para la transferencia*/
if (!(_.contains(statementConfig.transfer_user_ids, resUser.id))) {
instanceWeb.notification.do_warn("Atencion", "El usuario no tiene autorización para realizar transferencia.");
return false;
}
}
if (self.bankStatement[0].amount <= 0) {
if (!self.statementConfig.length){
instanceWeb.notification.do_warn("Atencion", "Caja sin saldo.");
return false;
}
if (!self.statementConfig[0].transfer_negative_amount){
instanceWeb.notification.do_warn("Atencion", "Caja sin saldo.");
return false;
}
}
self.fetchAccountJournal(self.id).then(function(accountJournal) {
return accountJournal;
}).then(function(accountJournal) {
self.accountJournal = accountJournal;
if (!accountJournal[0].statementJournal.length){
instanceWeb.notification.do_warn("Atencion", "No tienes otra caja abierta para realizar la transferencia.");
return false;
}
return self.showModalTransfer();
});
});
},
/* Account bank Statement */
fetchBankStatement: function(id) {
var bankStatement = new instanceWeb.Model('account.bank.statement');
return bankStatement.call('get_account_bank_statement_utility',[id], {
context: new instanceWeb.CompoundContext()
});
},
/* Account Journal*/
fetchAccountJournal: function(id) {
var accountJournal = new instanceWeb.Model('account.bank.statement');
return accountJournal.call('get_account_journal_utility',[id], {
context: new instanceWeb.CompoundContext()
});
},
/* Get statement Journal */
getStatementJournal(id) {
var self = this;
var journal = _.filter(self.accountJournal, function(item) {
return item.id === id ;
});
return _.flatten(_.map(journal, function(map) {
return map.statementJournal;
}));
},
/* Save Statement transfer */
statementCompletTransfers: function(values) {
var bankStatementTransfer = new instanceWeb.Model('account.bank.statement');
return bankStatementTransfer.call('statement_complet_transfers',[values], {
context: new instanceWeb.CompoundContext()
});
},
/*Modal Transfer */
showModalTransfer: function() {
var self = this;
var defer =$.Deferred();
var results = true;
var accountJournal = self.accountJournal;
accountJournal.unshift({'name': '', 'id': ''});
var modal = QWeb.render('ModalStatementUtility.Transfer',{
'journal': accountJournal
});
$('.openerp_webclient_container').after(modal);
$('.expired-account-modal').modal();
var statementAmount = $('.expired-account-modal').find('.statement-amount');
var statementAmountSymbol = $('.expired-account-modal').find('.statement-amount-symbol');
var selectedJournal = $('.expired-account-modal').find('.selected-Journal');
var statementOpen = $('.expired-account-modal').find('.statement-open-selected');
var amountTransfer = $('.expired-account-modal').find('.amount-transfer');
var amountTransferSymbol = $('.expired-account-modal').find('.amount-transfer-symbol');
var refTransfer = $('.expired-account-modal').find('.ref-transfer');
/* Button */
var buttonSave = $('.expired-account-modal').find('.button-save');
var currency = self.bankStatement[0].currencystatement;
/* Monto */
statementAmount.val(instanceWeb.formatCurrency(self.bankStatement[0].amount,currency));
/* Symbol */
statementAmountSymbol.text(currency.symbol);
amountTransferSymbol.text(currency.symbol);
/*select Journal */
selectedJournal.focus();
selectedJournal.change(function(e) {
statementOpen.empty();
var statementJournal = self.getStatementJournal(parseInt(selectedJournal.val()));
if (!!statementJournal.length)
statementOpen.append('');
_.each(statementJournal, function(item) {
statementOpen.append('');
});
});
/* amountTransfer.keyup */
amountTransfer.keyup(function(e) {
if (e.key === currency.decimalSeparator && currency.decimalPlaces > 0)
return false ;
var amount = instanceWeb.unFormatCurrency(amountTransfer.val());
amount = instanceWeb.formatCurrency(amount,currency)
amountTransfer.val(amount);
amountTransfer.css('border-color','#ccc');
if (e.keyCode === 13)
refTransfer.focus();
});
/* amountTransfer.focusout*/
amountTransfer.focusout(function(e) {
var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val());
var amount = Math.abs(instanceWeb.unFormatCurrency(amountTransfer.val()));
if (amountAvailable < amount && !self.statementConfig[0].transfer_negative_amount) {
instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja.");
amountTransfer.css('border-color','red');
amountTransfer.focus();
return false;
}
amountTransfer.css('border-color','#ccc');
amountTransfer.val(instanceWeb.formatCurrency(amount,currency))
});
/* Click buttonSave */
buttonSave.click(function(e){
var amountAvailable = instanceWeb.unFormatCurrency(statementAmount.val());
var amount = instanceWeb.unFormatCurrency(amountTransfer.val());
/* Journal */
if (!selectedJournal.val()) {
instanceWeb.notification.do_warn("Atencion", "Debes seleccionar un tipo de pago para continuar.");
selectedJournal.css('border-color','red');
selectedJournal.focus();
return false;
}
selectedJournal.css('border-color','#ccc');
/* Statement Open */
if (!statementOpen.val()) {
instanceWeb.notification.do_warn("Atencion", "Debes seleccionar la caja donde vas a transferir.");
statementOpen.css('border-color','red');
statementOpen.focus();
return false;
}
statementOpen.css('border-color','#ccc');
/* ammount transfer*/
if (amount <= 0.00) {
instanceWeb.notification.do_warn("Atencion", "El valor a transferir debe ser mayor a cero.");
amountTransfer.css('border-color','red');
amountTransfer.focus();
return false;
}
if (amountAvailable < amount) {
if (!self.statementConfig.length){
instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja .");
amountTransfer.css('border-color','red');
amountTransfer.focus();
return false;
}
if (!self.statementConfig[0].transfer_negative_amount){
instanceWeb.notification.do_warn("Atencion", "El valor a transferir supera el saldo disponible de la caja .");
amountTransfer.css('border-color','red');
amountTransfer.focus();
return false;
}
}
amountTransfer.css('border-color','#ccc');
/* Ref transfer */
if (!refTransfer.val()) {
instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo para la transferencia.");
refTransfer.css('border-color','red');
refTransfer.focus();
return false;
}
refTransfer.css('border-color','#ccc');
statementTransfer = {
'statementOriginId': self.bankStatement[0].id,
'statementDestinyId': parseInt(statementOpen.val()),
'amountTransfer': amount,
'refTransfer': refTransfer.val().trim(),
'journalID': parseInt(selectedJournal.val())
}
/* Save Payments */
self.statementCompletTransfers(statementTransfer).then(function(resultsTransfer) {
return resultsTransfer;
}).then(function(resultsTransfer) {
self.reloadPage();
self.removeModal(e);
if (!resultsTransfer)
results = false;
});
defer.resolve(results);
});
/* Click Cerrar */
$('.expired-account-modal').on('hidden.bs.modal', function(e) {
results = false;
defer.resolve(results);
self.removeModal(e);
});
return defer;
},
});
if (openerp.web && openerp.web.FormView) {
openerp.web.FormView.include({
load_record: function(record) {
this._super.apply(this, arguments);
if (this.model !== 'account.bank.statement')
return;
openerp.parentInstanceStatementTransfer = this;
if (openerp.widgetInstanceStatementTransfer) {
openerp.widgetInstanceStatementTransfer.updateId(record.id);
if (this.$el.find('.button-statement-transfer').length !== 0 )
return ;
}
if (this.$el.find('.button-statement-transfer').length !== 0 )
return;
openerp.widgetInstanceStatementTransfer = new openerp.EiruStatementTransfer(this);
var element =this.$el.find('.oe_form').find('.eiru-statement-utility');
openerp.widgetInstanceStatementTransfer.appendTo(element[0]);
openerp.widgetInstanceStatementTransfer.updateId(record.id);
}
});
}
})();