|
@@ -0,0 +1,211 @@
|
|
|
|
+openerp.account_bank_voucher_import = function (instance, local) {
|
|
|
|
+ local.widgetInstance = null;
|
|
|
|
+ local.parentInstance = null;
|
|
|
|
+
|
|
|
|
+ local.VoucherImportWidget = instance.Widget.extend({
|
|
|
|
+ template: 'account_bank_voucher_import.VoucherImport',
|
|
|
|
+ id : undefined,
|
|
|
|
+ accountStatement : [],
|
|
|
|
+ statementLine : [],
|
|
|
|
+ accountVoucher :[],
|
|
|
|
+ voucherImport : [],
|
|
|
|
+
|
|
|
|
+ init: function (parent) {
|
|
|
|
+ this._super(parent);
|
|
|
|
+ },
|
|
|
|
+ // Actualizar id del Objeto
|
|
|
|
+ updateId : function(id){
|
|
|
|
+ var self = this;
|
|
|
|
+ self.id=id;
|
|
|
|
+ },
|
|
|
|
+ start: function () {
|
|
|
|
+ var self = this;
|
|
|
|
+ this.$el.click(function (e){
|
|
|
|
+ self.fetchInitial();
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ // Iniciar
|
|
|
|
+ fetchInitial: function(){
|
|
|
|
+ var self= this;
|
|
|
|
+
|
|
|
|
+ self.fetchBankStatement().then(function(accountStatement){
|
|
|
|
+ return accountStatement;
|
|
|
|
+ }).then(function(accountStatement){
|
|
|
|
+ self.accountStatement = accountStatement;
|
|
|
|
+ return self.fetchBankStatementLine();
|
|
|
|
+ }).then(function(statementLine){
|
|
|
|
+ self.statementLine = statementLine;
|
|
|
|
+ return self.fetchVoucher();
|
|
|
|
+ }).then(function(accountVouche){
|
|
|
|
+ self.accountVouche = accountVouche;
|
|
|
|
+ return self.fetchJoinVoucher();
|
|
|
|
+ }).then(function(voucherImport){
|
|
|
|
+ self.voucherImport = voucherImport;
|
|
|
|
+ return self.insertBankStatementLine();
|
|
|
|
+ }).then(function(bankLine){
|
|
|
|
+ local.parentInstance.reload();
|
|
|
|
+ if (bankLine){
|
|
|
|
+ instance.web.notification.do_notify("Felicitación","Has importado los pagos con éxito.");
|
|
|
|
+ }else{
|
|
|
|
+ instance.web.notification.do_warn("Atención ","No tenes pagos que importar en esa caja.");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ // Registro de Caja
|
|
|
|
+ fetchBankStatement : function(){
|
|
|
|
+ var self = this;
|
|
|
|
+ var defer = $.Deferred();
|
|
|
|
+ var fields=['id','journal_id'];
|
|
|
|
+ var domain=[['id','=',self.id]];
|
|
|
|
+ var statement = new instance.web.Model('account.bank.statement');
|
|
|
|
+
|
|
|
|
+ statement.query(fields).filter(domain).all().then(function (results){
|
|
|
|
+ defer.resolve(results);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return defer;
|
|
|
|
+ },
|
|
|
|
+ // Linea del Registro de Caja
|
|
|
|
+ fetchBankStatementLine : function(){
|
|
|
|
+ var self = this;
|
|
|
|
+ var defer = $.Deferred();
|
|
|
|
+ var fields=['id','voucher_id'];
|
|
|
|
+ // var domain=[['statement_id','=',self.id]];
|
|
|
|
+ var domain=[['voucher_id','!=', false]];
|
|
|
|
+ var statementLine = new instance.web.Model('account.bank.statement.line');
|
|
|
|
+ statementLine.query(fields).filter(domain).all().then(function (results){
|
|
|
|
+ // statementLine.query(fields).all().then(function (results){
|
|
|
|
+ defer.resolve(results);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return defer;
|
|
|
|
+ },
|
|
|
|
+ //Consultar Voucher
|
|
|
|
+ fetchVoucher : function(){
|
|
|
|
+ var self = this;
|
|
|
|
+ var defer =$.Deferred();
|
|
|
|
+
|
|
|
|
+ var journal = _.flatten(_.map(self.accountStatement,function(map){
|
|
|
|
+ return map.journal_id[0];
|
|
|
|
+ }));
|
|
|
|
+ var voucher =_.flatten(_.map(self.statementLine,function(map){
|
|
|
|
+ return map.voucher_id[0]
|
|
|
|
+ }));
|
|
|
|
+ //
|
|
|
|
+ var fields =['id','partner_id','amount','journal_id','reference','move_id','account_id','state'];
|
|
|
|
+ var domain =[['state','=','posted'],['journal_id','in',journal],["id",'not in',voucher]];
|
|
|
|
+ var accountVouche = new instance.web.Model('account.voucher');
|
|
|
|
+
|
|
|
|
+ accountVouche.query(fields).filter(domain).all().then(function(results){
|
|
|
|
+ defer.resolve(results);
|
|
|
|
+ });
|
|
|
|
+ return defer;
|
|
|
|
+ },
|
|
|
|
+ // Generar Objeto principal
|
|
|
|
+ fetchJoinVoucher:function(){
|
|
|
|
+ var self = this;
|
|
|
|
+ var defer = $.Deferred();
|
|
|
|
+ var itemvoucher;
|
|
|
|
+ var voucherImport=[];
|
|
|
|
+
|
|
|
|
+ for (var i = 0; i < self.accountVouche.length; i++) {
|
|
|
|
+ itemvoucher = self.accountVouche[i];
|
|
|
|
+ voucherImport.push({
|
|
|
|
+ statement_id : this.id,
|
|
|
|
+ name : itemvoucher.reference,
|
|
|
|
+ partner_id : itemvoucher.partner_id[0],
|
|
|
|
+ amount : itemvoucher.amount,
|
|
|
|
+ voucher_id : itemvoucher.id,
|
|
|
|
+ journal_id : itemvoucher.journal_id[0],
|
|
|
|
+ account_id : itemvoucher.account_id[0],
|
|
|
|
+ journal_entry_id : itemvoucher.move_id[0]
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ defer.resolve(voucherImport);
|
|
|
|
+ return defer;
|
|
|
|
+ },
|
|
|
|
+ // insertar la Linea
|
|
|
|
+ insertBankStatementLine : function(){
|
|
|
|
+ var self =this;
|
|
|
|
+ var defer = $.Deferred();
|
|
|
|
+ var accountBanckStatementLine = new instance.web.Model('account.bank.statement.line');
|
|
|
|
+
|
|
|
|
+ self.asyncLoopFactory(self.voucherImport.length, function (loop) {
|
|
|
|
+ var objeto = self.voucherImport[loop.iteration()];
|
|
|
|
+
|
|
|
|
+ accountBanckStatementLine.call('create',[objeto], {
|
|
|
|
+ context: new instance.web.CompoundContext()
|
|
|
|
+ }).then(function (results) {
|
|
|
|
+ loop.next();
|
|
|
|
+ });
|
|
|
|
+ }, function () {
|
|
|
|
+ defer.resolve(self.voucherImport.length);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return defer;
|
|
|
|
+ },
|
|
|
|
+ /* ---------------------------------------------------------------------
|
|
|
|
+ * Description: Async loop util v2 written by Robert Gauto.
|
|
|
|
+ * --------------------------------------------------------------------*/
|
|
|
|
+ asyncLoopFactory : function (iterations, func, callback) {
|
|
|
|
+ var index = 0;
|
|
|
|
+ var done = false;
|
|
|
|
+ var loop = {
|
|
|
|
+ next: function () {
|
|
|
|
+ if (done) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (index < iterations) {
|
|
|
|
+ index++;
|
|
|
|
+ func(loop);
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ done = true;
|
|
|
|
+ callback();
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ iteration: function () {
|
|
|
|
+ return index - 1;
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ break: function () {
|
|
|
|
+ done = true;
|
|
|
|
+ callback();
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ loop.next();
|
|
|
|
+ return loop;
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (instance.web && instance.web.FormView) {
|
|
|
|
+ instance.web.FormView.include({
|
|
|
|
+ load_record: function (record) {
|
|
|
|
+ this._super.apply(this, arguments);
|
|
|
|
+
|
|
|
|
+ if (this.model !== 'account.bank.statement') return;
|
|
|
|
+
|
|
|
|
+ local.parentInstance = this;
|
|
|
|
+
|
|
|
|
+ if (local.widgetInstance) {
|
|
|
|
+ local.widgetInstance.updateId(record.id);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this.$el.find('.import_voucher').length != 0) return;
|
|
|
|
+
|
|
|
|
+ local.widgetInstance = new local.VoucherImportWidget(this);
|
|
|
|
+
|
|
|
|
+ var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
|
|
|
|
+ elemento = elemento.find('.oe_right.oe_button_box.voucher_import');
|
|
|
|
+
|
|
|
|
+ local.widgetInstance.appendTo(elemento);
|
|
|
|
+ local.widgetInstance.updateId(record.id);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|