eiru_payments_invoices.js 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345
  1. (function() {
  2. openerp.widgetInstancePaymentsInvoices = null;
  3. openerp.parentInstancePaymentsInvoices = {};
  4. var QWeb = openerp.web.qweb;
  5. var instanceWeb = openerp.web;
  6. openerp.EiruPaymentsInvoices = openerp.Widget.extend({
  7. template: 'eiruPaymentsInvoices.Invoices',
  8. id: undefined,
  9. buttons: undefined,
  10. accountInvoice: [],
  11. resPartner: [],
  12. accountJournal: [],
  13. resCompany: [],
  14. resCurrency: [],
  15. currencySelect: [],
  16. ResUser: [],
  17. statementOpen: [],
  18. /*Move*/
  19. accountMoveLine: [],
  20. moveLine:[],
  21. movePayments: [],
  22. /* bank */
  23. resBankType: [],
  24. resBank: [],
  25. bankPayments: [],
  26. resBankChequeType: [],
  27. fieldsAllowed: [],
  28. /* account interes */
  29. interestLine: [],
  30. interestConfig: [],
  31. /* statementConfig */
  32. statementConfig: [],
  33. /* Module Cheque */
  34. eiruBankPaymentsReferences: [],
  35. eiruAccountBankStatementUtility: [],
  36. eiruAccountInterest: [],
  37. /* init */
  38. init: function(parent) {
  39. this._super(parent);
  40. this.buttons = parent.$buttons;
  41. },
  42. /* start */
  43. start: function () {
  44. var self = this;
  45. this.$el.click(function() {
  46. self.fetchInitial();
  47. });
  48. self.buttons.click(function(e) {
  49. /* C (Crear) */
  50. if (e.target.accessKey === 'C')
  51. self.$el.css('display','none');
  52. /* E (Editar) */
  53. if (e.target.accessKey === 'E')
  54. self.$el.css('display','none');
  55. /* S (Guarrdar) */
  56. if (e.target.accessKey === 'S')
  57. self.$el.css('display','flex');
  58. /* D (Cancelar) */
  59. if (e.target.accessKey === 'D')
  60. self.$el.css('display','flex');
  61. });
  62. },
  63. /* Actualizar Id de la visat actual */
  64. updateId: function(id) {
  65. var self = this;
  66. self.id = id;
  67. },
  68. /* Reload Page*/
  69. reloadPage: function() {
  70. openerp.parentInstancePaymentsInvoices.reload();
  71. },
  72. /* Description: Función para remover el modal */
  73. removeModal: function() {
  74. $('.expired-account-modal').remove();
  75. $('.modal-backdrop').remove();
  76. },
  77. /* Método inicial */
  78. fetchInitial: function() {
  79. var self = this;
  80. self.fetchAccountInvoice(self.id).then(function(accountInvoice) {
  81. return accountInvoice;
  82. }).then(function(accountInvoice) {
  83. self.accountInvoice = accountInvoice;
  84. console.log(accountInvoice);
  85. return self.fetchVerifyModule('eiru_bank_payments_references');
  86. }).then(function(eiruBankPaymentsReferences) {
  87. self.eiruBankPaymentsReferences = eiruBankPaymentsReferences;
  88. return self.fetchResPartner();
  89. }).then(function(resPartner) {
  90. self.resPartner = resPartner;
  91. return self.fetchAccountjournal();
  92. }).then(function(accountJournal) {
  93. self.accountJournal = accountJournal;
  94. return self.fetchResCompany();
  95. }).then(function(resCompany) {
  96. self.resCompany = resCompany;
  97. return self.fetchResCurrency();
  98. }).then(function(resCurrency) {
  99. self.resCurrency = resCurrency;
  100. return self.fetchResBanktype();
  101. }).then(function(resBankType) {
  102. self.resBankType= resBankType;
  103. return self.fetchResBankChecktype();
  104. }).then(function(resBankChequeType) {
  105. self.resBankChequeType = resBankChequeType;
  106. return self.fetchResBank();
  107. }).then(function(resBank) {
  108. self.resBank = resBank;
  109. return self.fetchBankPayments();
  110. }).then(function(bankPayments) {
  111. self.bankPayments = bankPayments;
  112. return self.fetchMoveLine();
  113. }).then(function(accountMoveLine) {
  114. self.accountMoveLine = accountMoveLine;
  115. return self.fetchVerifyModule('eiru_account_interest');
  116. }).then(function(eiruAccountInterest) {
  117. self.eiruAccountInterest = eiruAccountInterest;
  118. return self.fetchInterestLine();
  119. }).then(function(interestLine) {
  120. self.interestLine = interestLine;
  121. return self.fetchInterestConfig()
  122. }).then(function(interestConfig) {
  123. self.interestConfig = interestConfig;
  124. return self.fetchVerifyModule('eiru_account_bank_statement_utility');
  125. }).then(function(eiruAccountBankStatementUtility) {
  126. self.eiruAccountBankStatementUtility = eiruAccountBankStatementUtility;
  127. return self.fetchStatementConfig();
  128. }).then(function(statementConfig) {
  129. self.statementConfig = statementConfig;
  130. return self.fetchStatement();
  131. }).then(function(statementOpen) {
  132. self.statementOpen = statementOpen;
  133. return self.generateMoveLine();
  134. }).then(function(moveLine) {
  135. self.moveLine = moveLine;
  136. return self.showModalPayments();
  137. });
  138. },
  139. /* Verificar modulo instalados */
  140. fetchVerifyModule: function(module) {
  141. if (!module)
  142. return [];
  143. var moduleModule =new openerp.web.Model('ir.module.module');
  144. var fields = ['id', 'name', 'state'];
  145. var domain = [['name', '=', module], ['state', '=', 'installed']];
  146. return moduleModule.query(fields).filter(domain).all();
  147. },
  148. /* Account Invoice */
  149. fetchAccountInvoice: function(ids) {
  150. var accountInvoice = new openerp.web.Model('account.invoice');
  151. var fields = ['id', 'number', 'date_invoice', 'amount_total', 'residual', 'partner_id', 'currency_id', 'type' ,'seq_invoice'];
  152. var domain = [['id', '=', ids],['state', '=', 'open']];
  153. return accountInvoice.query(fields).filter(domain).all();
  154. },
  155. /* Res partnes */
  156. fetchResPartner: function() {
  157. var self = this;
  158. if (!self.accountInvoice || !self.accountInvoice.length)
  159. return;
  160. var partnerId = self.accountInvoice[0].partner_id[0];
  161. var resPartner = new openerp.web.Model('res.partner');
  162. var fields = ['id', 'name','commercial_partner_id'];
  163. var domain = [['id', '=', partnerId]];
  164. return resPartner.query(fields).filter(domain).all();
  165. },
  166. /* Account Move Line */
  167. fetchMoveLine: function() {
  168. var self = this;
  169. var invoiceMoveLine = new openerp.web.Model('account.invoice');
  170. return invoiceMoveLine.call('get_moveline_invoice',[self.id], {
  171. context: new openerp.web.CompoundContext()
  172. });
  173. },
  174. /* Account Interest Line */
  175. fetchInterestLine: function() {
  176. var self = this;
  177. if (!self.eiruAccountInterest.length)
  178. return [];
  179. var moveLineIDS = _.map(self.accountMoveLine, function(map) {
  180. return map.id
  181. });
  182. var self = this;
  183. var invoiceMoveLine = new openerp.web.Model('account.invoice');
  184. return invoiceMoveLine.call('eiru_payments_account_interest_line',[moveLineIDS], {
  185. context: new openerp.web.CompoundContext()
  186. });
  187. },
  188. /* GET Interets configurations */
  189. fetchInterestConfig: function() {
  190. var self = this;
  191. if (!self.eiruAccountInterest.length)
  192. return [];
  193. var fields = ['id','name', 'lock_move_line'];
  194. var domain = [['active', '=', true]];
  195. var accountInterestConfig = new openerp.web.Model('account.interest.config');
  196. return accountInterestConfig.query(fields).filter(domain).all();
  197. },
  198. /* Res bank Paymnets */
  199. fetchBankPayments: function() {
  200. var self = this;
  201. if (!self.eiruBankPaymentsReferences.length)
  202. return [];
  203. var invoiceBankPayments = new openerp.web.Model('account.invoice');
  204. return invoiceBankPayments.call('get_bank_payments', {
  205. context: new openerp.web.CompoundContext()
  206. });
  207. },
  208. /* Account Journal Type[BANK, CASH]*/
  209. fetchAccountjournal: function() {
  210. var fields = ['id', 'name', 'code', 'type', 'currency', 'default_debit_account_id', 'default_credit_account_id'];
  211. var domain = [['active', '=', true], ['type', 'in', ['bank', 'cash']]];
  212. var journalSalario = new openerp.web.Model('account.journal');
  213. return journalSalario.query(fields).filter(domain).all();
  214. },
  215. /* Consultar Compania */
  216. fetchResCompany: function() {
  217. var fields = ['id','name', 'currency_id'];
  218. var domain = [['id', '=', 1]];
  219. var resCompanyIds = new openerp.web.Model('res.company');
  220. return resCompanyIds.query(fields).filter(domain).all();
  221. },
  222. /* Consultar Bank Type */
  223. fetchResBanktype: function() {
  224. var self = this;
  225. if (!self.eiruBankPaymentsReferences.length)
  226. return [];
  227. var invoiceBankPayments = new openerp.web.Model('account.invoice');
  228. return invoiceBankPayments.call('get_bank_payment_type', {
  229. context: new openerp.web.CompoundContext()
  230. });
  231. },
  232. /* Consultar Bank Check Type */
  233. fetchResBankChecktype: function() {
  234. var self = this;
  235. if (!self.eiruBankPaymentsReferences.length)
  236. return [];
  237. var fields = ['id','name', 'code'];
  238. var resBnakCheckType = new openerp.web.Model('res.bank.cheque.type');
  239. return resBnakCheckType.query(fields).all();
  240. },
  241. /*Consultar Res Bank */
  242. fetchResBank: function() {
  243. var self = this;
  244. if (!self.eiruBankPaymentsReferences.length)
  245. return [];
  246. var fields = ['id', 'name', 'ruc'];
  247. var resBank = new openerp.web.Model('res.bank');
  248. return resBank.query(fields).all();
  249. },
  250. /* Consultar Moneda Activas */
  251. fetchResCurrency: function() {
  252. var invoicesCurrencyPayments = new openerp.web.Model('account.invoice');
  253. return invoicesCurrencyPayments.call('get_currency_payments_invoices', {
  254. context: new openerp.web.CompoundContext()
  255. });
  256. },
  257. /* statement Config */
  258. fetchStatementConfig: function() {
  259. var self = this;
  260. if (!self.eiruAccountBankStatementUtility.length)
  261. return [];
  262. var fields = ['id','name', 'active', 'import_statement_payments'];
  263. var domain = [['active', '=', true]];
  264. var statementConfig = new openerp.web.Model('account.bank.statement.config');
  265. return statementConfig.query(fields).filter(domain).all();
  266. },
  267. /* Get User */
  268. fetchStatement: function(){
  269. var invoiceStatement = new openerp.web.Model('account.invoice');
  270. return invoiceStatement.call('get_statement', {
  271. context: new openerp.web.CompoundContext()
  272. });
  273. },
  274. /* Generar las cuotas a pagar */
  275. generateMoveLine: function() {
  276. var self = this;
  277. var moveLine = [];
  278. var newMoveLine= [];
  279. var defer = $.Deferred();
  280. var currencyInvoice = self.getCurrency(self.accountInvoice[0].currency_id[0]).shift();
  281. _.each(self.accountMoveLine, function(line){
  282. moveLine.push({
  283. 'id': line.id,
  284. 'dateMaturity': moment(line.dateMaturity).format('DD/MM/YYYY'),
  285. 'debit': line.amountCurrency,
  286. 'residual': line.amountResidualCurrency,
  287. 'currencyAmount': line.currencyAmount,
  288. 'debitFormat': accounting.formatMoney((line.amountCurrency), currencyInvoice.symbol,currencyInvoice.decimalPlaces, currencyInvoice.thousandsSeparator, currencyInvoice.decimalSeparator),
  289. 'residualFormat': accounting.formatMoney((line.amountResidualCurrency), currencyInvoice.symbol, currencyInvoice.decimalPlaces, currencyInvoice.thousandsSeparator, currencyInvoice.decimalSeparator)
  290. });
  291. });
  292. newMoveLine = _.sortBy(moveLine, function(item){return new Date(item.dateMaturity.trim())});
  293. defer.resolve(newMoveLine);
  294. return defer;
  295. },
  296. /* Get Move Line */
  297. getMoveLine: function(ids) {
  298. var self = this;
  299. return _.filter(self.moveLine, function(line){
  300. return _.contains(ids, line.id);
  301. });
  302. },
  303. /* Get Move Line Currency */
  304. getMoveLineCurrency: function(currencyAmount, idCurrency) {
  305. return _.filter(currencyAmount, function(currency){
  306. return currency.id === idCurrency;
  307. });
  308. },
  309. /* Generar lista de cuotas seleccionadas */
  310. generateSelectTotal:function(idSelect, idCurrency){
  311. var self = this;
  312. var movePayments = [];
  313. var moveCurrency = [];
  314. var residual = 0;
  315. var move = self.getMoveLine(idSelect);
  316. if (!move.length){
  317. return movePayments;
  318. }
  319. _.each(move, function(line){
  320. moveCurrency = self.getMoveLineCurrency(line.currencyAmount, idCurrency.id).shift();
  321. residual += moveCurrency.amountCurencyResidual;
  322. });
  323. movePayments.push({
  324. 'ids': idSelect,
  325. 'amountResidual': residual,
  326. 'amountResidualFormat': instanceWeb.formatCurrency(residual, idCurrency),
  327. 'currencySymbol': idCurrency.symbol,
  328. 'currencyRate': idCurrency.rate
  329. });
  330. return movePayments;
  331. },
  332. /* getCurrency ['filtra la moneda por id'']*/
  333. getCurrency: function(id) {
  334. var self = this;
  335. return _.filter(self.resCurrency, function(item) {
  336. return item.id === id;
  337. });
  338. },
  339. /* Obtener la monedad sobre el diario seleccionada */
  340. getCurrencySelect: function(id) {
  341. var self = this;
  342. var currency = [];
  343. if (!id)
  344. id = self.resCompany[0].currency_id[0];
  345. currency = self.getCurrency(id);
  346. return currency;
  347. },
  348. /* Get Journal*/
  349. getJournal: function(code) {
  350. var self = this;
  351. return _.filter(self.accountJournal, function(item) {
  352. return item.code === code;
  353. });
  354. },
  355. /* GET fields filter */
  356. getBankTypeFieldsAllowed: function(name) {
  357. var self = this;
  358. return _.contains(self.fieldsAllowed, name);
  359. },
  360. /*Get Bnak */
  361. getResBank: function(id) {
  362. var self= this;
  363. return _.filter(self.resBank, function(bank) {
  364. return bank.id === id;
  365. });
  366. },
  367. /* Select Journal Change */
  368. getSelectedJournal: function(code) {
  369. var self = this;
  370. var currencySelect = []
  371. var journal = self.getJournal(code).shift();
  372. var company = self.resCompany;
  373. if (!journal)
  374. return [];
  375. if (!journal.currency) {
  376. currencySelect = self.getCurrency(company[0].currency_id[0]);
  377. }else {
  378. currencySelect = self.getCurrency(journal.currency[0]);
  379. }
  380. self.currencySelect = currencySelect;
  381. return currencySelect;
  382. },
  383. /* verificar si existe el numero de chueque */
  384. checkNumber: function(bankId, numberCta, number) {
  385. /**
  386. * [verificar si existe el numero de cheque en 'res.bank.paymnets' ]
  387. * :param bankId: id de banco (res_bank.id).
  388. * :param numberCta: numero de cuneta(res_bank_payments.number_cta).
  389. * :param number: numero de cheque/boleta/vale (res_bank_payments.number)
  390. * :return : [Objeto] si existe datos que satisfacer el filtro, vacio si no.
  391. */
  392. var self = this;
  393. if (!self.bankPayments)
  394. return [];
  395. /* filtar bank Payments */
  396. return _.filter(self.bankPayments, function(item) {
  397. return item.bankId === bankId && item.numberCta === numberCta && item.number === number;
  398. });
  399. },
  400. /*Obtener cajas del diario seleccionado */
  401. getStatementeJournal: function(journalId) {
  402. var self = this;
  403. return _.filter(self.statementOpen, function(item){
  404. return item.journalID === journalId;
  405. });
  406. },
  407. /* filter type bank operation */
  408. filterTypeOperationBank: function(journal_id){
  409. var self = this;
  410. return _.filter(self.resBankType, function(item){
  411. return _.contains(item.journal_ids, journal_id)
  412. });
  413. },
  414. /* Get bank */
  415. getTypeOperation(id){
  416. var self = this;
  417. return _.filter(self.resBankType, function(item){
  418. return item.id === id;
  419. });
  420. },
  421. /* get cheque type */
  422. getBankChequeType: function(id){
  423. var self= this;
  424. return _.filter(self.resBankChequeType, function(item){
  425. return item.id === id;
  426. });
  427. },
  428. /* FIlter Line interest */
  429. filterInterestLineId:function(moveId){
  430. var self = this;
  431. return _.filter(self.interestLine, function(item) {
  432. return item.moveLineId === moveId;
  433. });
  434. },
  435. /**
  436. * [ showModalPayments ]
  437. */
  438. showModalPayments: function() {
  439. var self = this;
  440. var defer =$.Deferred();
  441. var results = true;
  442. var accountJournal = self.accountJournal;
  443. var moveSelected = [];
  444. var selectTotal = [];
  445. var currencyId = [];
  446. var idRow = [];
  447. var bankId = undefined;
  448. var numberName = 'Nº Comprobante';
  449. var amountBalanceBank = undefined;
  450. var typePayments = undefined;
  451. accountJournal.unshift({
  452. 'name': "",
  453. 'code': ""
  454. });
  455. var modal = QWeb.render('eiruPaymentsInvoices.Modal',{
  456. moveLine: self.moveLine,
  457. journal: accountJournal,
  458. });
  459. $('.openerp_webclient_container').after(modal);
  460. $('.expired-account-modal').modal();
  461. /* Button */
  462. var savePaymentsButton = $('.expired-account-modal').find('.save-payments-button');
  463. /* Table */
  464. var tableRow = $('.expired-account-modal').find('.table-tbody').find('tr');
  465. /* Monto total a pagar - symbol*/
  466. var amountTotal = $('.expired-account-modal').find('.amount-total');
  467. var amountTotalSymbol = $('.expired-account-modal').find('.amount-total-symbol');
  468. /* fecha de operación*/
  469. var dateOperation = $('.expired-account-modal').find('.date-operation');
  470. /* Diario */
  471. var journalSelect = $('.expired-account-modal').find('.journal-select');
  472. /* Monto a pagar - symbolo */
  473. var amountPayments = $('.expired-account-modal').find('.amount-payments');
  474. var amountPaymentsSymbol = $('.expired-account-modal').find('.amount-payments-symbol');
  475. /* Caja */
  476. var statementSelect = $('.expired-account-modal').find('.statement-select');
  477. /* Tipo de operación bancaria */
  478. var bankTypeSelect = $('.expired-account-modal').find('.bank-type-select');
  479. /* banking operation */
  480. var bankingOperation = $('.expired-account-modal').find('.eiru-banking-operation');
  481. /* Disabled paymentsAmount */
  482. amountPayments.attr("disabled", true);
  483. /* Date Now */
  484. dateOperation.val(moment().format("YYYY-MM-DD"));
  485. /* Desabilitar Chech de la Table */
  486. var dateMin = undefined;
  487. var rowselect = undefined;
  488. var dateSelect = undefined;
  489. /*get currency invoices*/
  490. var currencyInvoice = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  491. if (currencyInvoice) {
  492. amountTotalSymbol.text(currencyInvoice.symbol);
  493. amountPaymentsSymbol.text(currencyInvoice.symbol);
  494. }
  495. /* Disabled Chech Moveline */
  496. _.each(tableRow, function(tr) {
  497. var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked;
  498. var dateMatu = new Date(($(tr).children()[2].textContent).trim());
  499. if (!ckechk) {
  500. if (!dateMin) {
  501. dateMin = dateMatu.getTime();
  502. } else {
  503. $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true);
  504. }
  505. }
  506. var idMove = parseInt(($(tr).children()[0].textContent).trim());
  507. if (!!self.interestConfig.length && self.interestConfig[0].lock_move_line) {
  508. var move = self.filterInterestLineId(idMove);
  509. var moveState = _.map(move, function(map) {
  510. return map.state
  511. })
  512. if (_.contains(moveState, 'open')) {
  513. ($($(tr).children()[1]).find('.select-move-payments'))[0].checked = false;
  514. $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true);
  515. $($(tr).children()[3]).text("Existe interés sobre la cuota vencida REF("+move[0].interest[0].name+").")
  516. }
  517. }
  518. });
  519. /* Selecionar las cuotas */
  520. tableRow.click(function(e) {
  521. if ($(e.target).index() !== 0)
  522. return;
  523. idRow = parseInt(($(e.target).closest('tr').children()[0].textContent).trim());
  524. if (e.target.checked === true) {
  525. moveSelected.push(idRow);
  526. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  527. if (journalSelect.val()) {
  528. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  529. }
  530. self.movePayments = self.generateSelectTotal(moveSelected,currencyId);
  531. selectTotal = self.movePayments[0];
  532. if (selectTotal) {
  533. /*total a pagar*/
  534. amountTotal.val(selectTotal.amountResidualFormat);
  535. amountTotalSymbol.text(selectTotal.currencySymbol);
  536. /*Monto a pagar */
  537. amountPayments.val(selectTotal.amountResidualFormat);
  538. amountPaymentsSymbol.text(selectTotal.currencySymbol);
  539. }
  540. dateMin = undefined;
  541. rowselect = undefined;
  542. dateSelect = undefined;
  543. _.each(tableRow, function(tr) {
  544. var dateMatu = new Date(($(tr).children()[2].textContent).trim());
  545. var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked;
  546. if (ckechk) {
  547. if (!rowselect) {
  548. rowselect = $($(tr).children()[1]).find('.select-move-payments');
  549. dateSelect = dateMatu.getTime();
  550. } else {
  551. if (dateMatu.getTime() > dateSelect) {
  552. rowselect.attr("disabled", true);
  553. rowselect = $($(tr).children()[1]).find('.select-move-payments');
  554. dateSelect = dateMatu.getTime();
  555. } else {
  556. $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true);
  557. }
  558. }
  559. } else {
  560. if (!dateMin) {
  561. dateMin = dateMatu.getTime();
  562. var moveId = parseInt(($(tr).children()[0].textContent).trim());
  563. $($(tr).children()[1]).find('.select-move-payments').removeAttr("disabled");
  564. if (!!self.interestConfig.length && self.interestConfig[0].lock_move_line) {
  565. var move = self.filterInterestLineId(moveId);
  566. var moveState = _.map(move, function(map) {
  567. return map.state;
  568. });
  569. if ((_.contains(moveState, 'open'))) {
  570. $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true);
  571. }
  572. }
  573. }
  574. }
  575. });
  576. } else {
  577. var indexRow = undefined;
  578. _.each(moveSelected, function(input, index) {
  579. if (input === idRow) {
  580. indexRow = index;
  581. }
  582. });
  583. moveSelected.splice(indexRow,1);
  584. if (journalSelect.val()) {
  585. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  586. }else {
  587. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  588. }
  589. self.movePayments = self.generateSelectTotal(moveSelected,currencyId);
  590. selectTotal = self.movePayments[0];
  591. if (selectTotal) {
  592. amountTotal.val(selectTotal.amountResidualFormat);
  593. amountTotalSymbol.text(selectTotal.currencySymbol);
  594. /*Monto a pagar */
  595. amountPayments.val(selectTotal.amountResidualFormat);
  596. amountPaymentsSymbol.text(selectTotal.currencySymbol);
  597. } else {
  598. amountTotal.val(0);
  599. amountTotalSymbol.text(currencyId.symbol);
  600. /*Monto a pagar */
  601. amountPayments.val(0);
  602. amountPaymentsSymbol.text(currencyId.symbol);
  603. }
  604. dateMin = undefined;
  605. rowselect = undefined;
  606. dateSelect = undefined;
  607. _.each(tableRow, function(tr) {
  608. var dateMatu = new Date(($(tr).children()[2].textContent).trim());
  609. var ckechk = ($($(tr).children()[1]).find('.select-move-payments'))[0].checked;
  610. if (ckechk) {
  611. rowselect = $($(tr).children()[1]).find('.select-move-payments');
  612. dateSelect = dateMatu.getTime();
  613. } else {
  614. if (rowselect)
  615. rowselect.removeAttr("disabled");
  616. if (!dateMin) {
  617. dateMin = dateMatu.getTime();
  618. } else {
  619. $($(tr).children()[1]).find('.select-move-payments').attr("disabled", true);
  620. }
  621. }
  622. });
  623. }
  624. });
  625. /* Cambio en el método de pago */
  626. journalSelect.change(function(e) {
  627. var journal = [];
  628. bankingOperation.empty();
  629. statementSelect.val('');
  630. if (journalSelect.val()) {
  631. journal = self.getJournal(journalSelect.val()).shift();
  632. if (!!journal) {
  633. amountPayments.removeAttr("disabled");
  634. /* statement Open */
  635. if (!!self.eiruAccountBankStatementUtility.length) {
  636. if(!!self.statementConfig.length) {
  637. if (self.statementConfig[0].import_statement_payments === 'manual_import') {
  638. var statement = self.getStatementeJournal(journal.id);
  639. /* Generar lista de caja abiertas. */
  640. $('.expired-account-modal').find('.statement-config').css('display','none');
  641. statementSelect.empty();
  642. if (!!statement.length) {
  643. $('.expired-account-modal').find('.statement-config').css('display','flex');
  644. var cashboxOpen = '<option value=""></option>';
  645. _.each(statement, function(item) {
  646. cashboxOpen += '<option value="'+item.id+'">'+item.name+'</option>';
  647. });
  648. statementSelect.append(cashboxOpen);
  649. }
  650. }
  651. }
  652. }
  653. /* Type operación bank */
  654. typeOperationBank = self.filterTypeOperationBank(journal.id);
  655. bankTypeSelect.empty();
  656. self.fieldsBank = [];
  657. $('.expired-account-modal').find('.type-select-bank').css('display','none');
  658. if (!!typeOperationBank.length) {
  659. $('.expired-account-modal').find('.type-select-bank').css('display','flex');
  660. var typeOperation = '<option value=""></option>';
  661. _.each(typeOperationBank, function(item) {
  662. typeOperation += '<option value="'+item.id+'">'+item.name+'</option>';
  663. });
  664. bankTypeSelect.append(typeOperation);
  665. }
  666. }
  667. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  668. } else {
  669. amountPayments.attr("disabled", true);
  670. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  671. }
  672. self.movePayments = self.generateSelectTotal(moveSelected,currencyId);
  673. selectTotal = self.movePayments[0];
  674. if (selectTotal) {
  675. /*total a pagar*/
  676. amountTotal.val(selectTotal.amountResidualFormat);
  677. amountTotalSymbol.text(selectTotal.currencySymbol);
  678. /*Monto a pagar */
  679. amountPayments.val(selectTotal.amountResidualFormat);
  680. amountPaymentsSymbol.text(selectTotal.currencySymbol);
  681. }
  682. });
  683. /* Typo de pago */
  684. bankTypeSelect.change(function(e) {
  685. bankingOperation.empty();
  686. if (!bankTypeSelect.val())
  687. return false;
  688. var typeBank = self.getTypeOperation(parseInt(bankTypeSelect.val())).shift();
  689. typePayments = typeBank;
  690. var fields = '';
  691. var cont = 0;
  692. var fieldsBank = [];
  693. _.each(typeBank.fields_allowed, function(item, index) {
  694. if (cont === 0)
  695. fields += '<div class="row">';
  696. cont ++;
  697. var fieldModel = [];
  698. var typeText ="text";
  699. var select = "payments-";
  700. var classField = select.concat(item.name.replace(/_/g, '-'));
  701. if (item.string.typeField === 'date')
  702. typeText = "date";
  703. fields += '<div class="col-xs-6">';
  704. fields += '<label class="payments-invoice-label invoice-payment-label-select">'+item.label+'</label>';
  705. fields += '<div class="payments-invoice-group invoice-payment-input-select">';
  706. if (item.string.type === 'normal') {
  707. if (item.string.typeField === 'float') {
  708. fields += '<input type="'+typeText+'" class="form-control payments-invoice-input amount-currency '+classField+'" value="0"></input>';
  709. fields += '<div class="payments-invoice-symbol">';
  710. fields += '<span class="input-group-text amount-total-symbol">'+currencyId.symbol+'</span>';
  711. fields += '</div>';
  712. }
  713. else {
  714. fields += '<input type="'+typeText+'" class="payments-invoice-input invoice-payment-input input-date '+classField+'" ></input>';
  715. }
  716. } else {
  717. var test = item.string.model.split(".");
  718. var newModel = "";
  719. _.each(test, function(item, index) {
  720. if (index === 0 ){
  721. newModel = item;
  722. } else {
  723. var newLetter = "";
  724. _.each(item, function(inv, index) {
  725. if (index === 0) {
  726. newLetter = inv.toUpperCase();
  727. }else {
  728. newLetter = newLetter.concat(inv);
  729. }
  730. });
  731. newModel = newModel.concat(newLetter);
  732. }
  733. })
  734. fieldModel = _.flatten(_.filter(self, function(element, index) {
  735. return index === newModel;
  736. }));
  737. if (item.string.searchType === 'selection') {
  738. fields += '<select class="payments-invoice-input invoice-payment-input '+classField+'">';
  739. fields += '<option value=""></option>';
  740. _.each(fieldModel, function(item) {
  741. fields += '<option value="'+item.id+'">'+item.name+'</option>';
  742. });
  743. fields += '</select>';
  744. } else {
  745. fields += '<input type="text" class="form-control payments-invoice-input invoice-payment-input input-date ui-autocomplete-input '+classField+'" autocomplete="off" placeholder="'+item.label+'"></input>';
  746. }
  747. }
  748. fields += '</div>';
  749. fields += '</div>';
  750. if (cont === 2 || (index +1 ) === typeBank.fields_allowed.length) {
  751. fields += '</div>';
  752. cont = 0;
  753. }
  754. /* Tyoe Field */
  755. fieldsBank.push({
  756. 'field': classField,
  757. 'name': item.name,
  758. 'required': item.string.required,
  759. 'label': item.label,
  760. 'type': item.string.typeField,
  761. 'model': fieldModel,
  762. 'modelAutoComplete': _.map(fieldModel, function(item) {
  763. return {
  764. label: item.id +" - "+ item.name,
  765. value: item.id +" - "+ item.name
  766. };
  767. }),
  768. 'searchType': item.string.searchType,
  769. });
  770. });
  771. self.fieldsBank = fieldsBank;
  772. bankingOperation.append(fields);
  773. /* AutoComplete*/
  774. _.each(_.filter(fieldsBank, function(item){return item.searchType === 'autocomplete'}), function(autoComplete) {
  775. var fieldComplete = $('.expired-account-modal').find('.'+autoComplete.field);
  776. fieldComplete.autocomplete({
  777. source: autoComplete.model,
  778. minLength:0,
  779. })
  780. })
  781. });
  782. /**
  783. * [Keyup]
  784. */
  785. $('.expired-account-modal').keyup(function(e){
  786. var nameClas = (($(e.target)[0].className).trim()).split(" ");
  787. /* fields Amount Currency */
  788. if (_.contains(nameClas, 'amount-currency')) {
  789. var ammountBank = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]);
  790. if (journalSelect.val()) {
  791. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  792. } else {
  793. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  794. }
  795. var amount_add = instanceWeb.unFormatCurrency(ammountBank.val());
  796. ammountBank.val(instanceWeb.formatCurrency(amount_add,currencyId));
  797. ammountBank.css('border-color','#ccc');
  798. }
  799. /* AutoComplete */
  800. if (_.contains(nameClas, 'ui-autocomplete-input')) {
  801. _.each(_.filter(self.fieldsBank, function(item){return item.searchType === 'autocomplete'}), function(autoComplete) {
  802. if (nameClas[nameClas.length -1] === autoComplete.field) {
  803. var fieldComplete = $('.expired-account-modal').find('.'+autoComplete.field);
  804. fieldComplete.autocomplete({
  805. source: autoComplete.modelAutoComplete,
  806. minLength:0,
  807. select: function(e, ui) {
  808. var id = undefined;
  809. if (!!ui.item.value)
  810. id = ui.item.value.split('-');
  811. },
  812. })
  813. }
  814. });
  815. }
  816. });
  817. /**
  818. * [focusout]
  819. */
  820. $('.expired-account-modal').focusout(function(e){
  821. var nameClas = (($(e.target)[0].className).trim()).split(" ");
  822. /**
  823. * [Verify amount-total]
  824. */
  825. if (_.contains(nameClas, 'payments-amount-total')){
  826. var ammountBank = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1])
  827. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  828. if (journalSelect.val())
  829. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  830. var amount_add = instanceWeb.unFormatCurrency(ammountBank.val());
  831. var paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val());
  832. var paymentsTotal = instanceWeb.unFormatCurrency(amountTotal.val());
  833. if (amount_add <= 0){
  834. openerp.web.notification.do_warn("Atencion", "El valor debe ser mayor que 0");
  835. ammountBank.css('border-color','red');
  836. ammountBank.focus();
  837. return false;
  838. }
  839. if (amount_add < paymentsAmount) {
  840. amountPayments.val(instanceWeb.formatCurrency(amount_add, currencyId));
  841. }
  842. ammountBank.val(instanceWeb.formatCurrency(amount_add, currencyId));
  843. }
  844. /**
  845. * [Verify Bank Selected]
  846. */
  847. if (_.contains(nameClas, 'payments-bank-id')) {
  848. var bankSelected = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]);
  849. var valueBank = bankSelected.val();
  850. if (_.contains(nameClas, 'ui-autocomplete-input'))
  851. valueBank = (valueBank.split('-'))[0];
  852. if (!bankSelected.val()) {
  853. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar un banco para continuar.");
  854. bankSelected.css('border-color','red');
  855. bankSelected.focus();
  856. return false;
  857. }
  858. var bankValue = self.getResBank(parseInt(valueBank)).shift();
  859. if (!bankValue) {
  860. openerp.web.notification.do_warn("Atencion", "El banco no existe, ingrese un banco valido.");
  861. bankSelected.css('border-color','red');
  862. bankSelected.focus();
  863. return false;
  864. }
  865. bankSelected.css('border-color','#ccc');
  866. bankId = bankValue.id
  867. }
  868. /**
  869. * [Verify Cheque type]
  870. */
  871. if (_.contains(nameClas, 'payments-cheque-type-id')){
  872. var typeChequeSelected = $('.expired-account-modal').find('.'+nameClas[nameClas.length -1]);
  873. var valuetype = typeChequeSelected.val();
  874. if (_.contains(nameClas, 'ui-autocomplete-input'))
  875. valuetype = (valuetype.split('-'))[0];
  876. if (!typeChequeSelected.val()) {
  877. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar el tipo de cheque para continuar.");
  878. typeChequeSelected.css('border-color','red');
  879. typeChequeSelected.focus();
  880. return false;
  881. }
  882. var chequeTypeValue = self.getBankChequeType(parseInt(valuetype)).shift();
  883. if (!chequeTypeValue) {
  884. openerp.web.notification.do_warn("Atencion", "Tipo de cheque no existe , ingrese un tipo de cheque valido.");
  885. typeChequeSelected.css('border-color','red');
  886. typeChequeSelected.focus();
  887. return false;
  888. }
  889. typeChequeSelected.css('border-color','#ccc');
  890. }
  891. /**
  892. * [Verify Bank Paymnets]
  893. */
  894. if ((_.contains(nameClas, 'payments-bank-id')) || (_.contains(nameClas, 'payments-number')) || (_.contains(nameClas, 'payments-number-cta'))){
  895. var fieldsPayments = _.map(self.fieldsBank, function(map){
  896. return map.field
  897. });
  898. if ((_.contains(fieldsPayments, 'payments-bank-id')) && (_.contains(fieldsPayments, 'payments-number')) && (_.contains(fieldsPayments, 'payments-number-cta'))){
  899. var paymentsBankId = $('.expired-account-modal').find('.payments-bank-id');
  900. var paymentsNumber = $('.expired-account-modal').find('.payments-number');
  901. var paymentsNumberCta = $('.expired-account-modal').find('.payments-number-cta');
  902. if (!!bankId && !!paymentsNumber.val() && paymentsNumberCta.val() && !(typePayments.allow_duplicate_operation)) {
  903. var chechNumberCh = self.checkNumber(bankId, paymentsNumberCta.val().trim(), paymentsNumber.val().trim()).shift();
  904. self.verifyOperacionBank(chechNumberCh, amountPayments, currencyId, typePayments);
  905. }
  906. }
  907. }
  908. });
  909. /* Total a pagar keyup */
  910. amountPayments.keyup(function(e) {
  911. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  912. if (journalSelect.val()) {
  913. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  914. }
  915. if (e.key === currencyId.decimalSeparator && currencyId.decimalPlaces > 0)
  916. return false ;
  917. var amount_add = instanceWeb.unFormatCurrency(amountPayments.val());
  918. amountPayments.val(instanceWeb.formatCurrency(amount_add, currencyId));
  919. amountPayments.css('border-color','#ccc');
  920. if (e.keyCode === 13)
  921. savePaymentsButton.focus();
  922. });
  923. /* focusout */
  924. amountPayments.focusout(function(e) {
  925. currencyId = self.getCurrencySelect(self.accountInvoice[0].currency_id[0]).shift();
  926. if (journalSelect.val()) {
  927. currencyId = self.getSelectedJournal(journalSelect.val()).shift();
  928. }
  929. var amountTotalPayments = instanceWeb.unFormatCurrency(amountPayments.val());
  930. var paymentsTotal = instanceWeb.unFormatCurrency(amountTotal.val());
  931. if (amountTotalPayments <= 0) {
  932. openerp.web.notification.do_warn("Atencion", "El monto a pagar no puede ser 0.");
  933. amountPayments.css('border-color','red');
  934. amountPayments.focus();
  935. }
  936. var fields = "";
  937. $('.expired-account-modal').find('.ammount-returned').css('display','none');
  938. $('.expired-account-modal').find('.ammount-returned').empty();
  939. if (amountTotalPayments > paymentsTotal) {
  940. var returned = (instanceWeb.formatCurrency((amountTotalPayments - paymentsTotal), currencyId));
  941. $('.expired-account-modal').find('.ammount-returned').css('display','flex');
  942. fields += '<label class="payments-invoice-label invoice-payment-label-select"> Vuelto </label>';
  943. fields += '<div class="payments-invoice-group invoice-payment-input-select">';
  944. fields += '<input type="text" class="form-control payments-invoice-input" readonly="readonly" value="'+returned+'"></input>';
  945. fields += '<div class="payments-invoice-symbol">';
  946. fields += '<span class="input-group-text amount-total-symbol">'+currencyId.symbol+'</span>';
  947. fields += '</div>';
  948. fields += '</div>';
  949. $('.expired-account-modal').find('.ammount-returned').append(fields);
  950. }
  951. });
  952. /* Save Payments */
  953. savePaymentsButton.click(function(e) {
  954. var savePayments = [];
  955. var paymentsAmount = 0;
  956. var currencyJournal = [];
  957. var journal = [];
  958. var chechNumberCh = [];
  959. /* Verificar si se selecciono algunas cuotas */
  960. if (!self.movePayments ||!self.movePayments.length) {
  961. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar al menos una cuota para continuar.");
  962. return false;
  963. }
  964. /* Verificar si se seleccionado el método de pago */
  965. if (!journalSelect.val()) {
  966. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar un método de pago para continuar.");
  967. journalSelect.css('border-color','red');
  968. journalSelect.focus();
  969. return false;
  970. }
  971. journalSelect.css('border-color','#ccc');
  972. journal = self.getJournal(journalSelect.val());
  973. currencyJournal = self.getSelectedJournal(journalSelect.val()).shift();
  974. paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val());
  975. /* verificar si fue ingresado el monto a pagar */
  976. if (paymentsAmount <= 0 ) {
  977. openerp.web.notification.do_warn("Atencion", "El monto a pagar no debe ser 0.");
  978. amountPayments.css('border-color','red');
  979. amountPayments.focus();
  980. return false;
  981. }
  982. amountPayments.css('border-color','#ccc');
  983. /* Verificar Caja */
  984. var statement = self.getStatementeJournal(journal[0].id);
  985. if (!!self.eiruAccountBankStatementUtility.length){
  986. if (!!self.statementConfig.length) {
  987. if (!!statement.length && !statementSelect.val() && self.statementConfig[0].import_statement_payments === 'manual_import'){
  988. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar una caja para continuar.");
  989. statementSelect.css('border-color','red');
  990. statementSelect.val();
  991. return false;
  992. }
  993. }
  994. }
  995. statementSelect.css('border-color','#ccc');
  996. typeOperationBank = self.filterTypeOperationBank(journal[0].id);
  997. if (!!typeOperationBank.length && !bankTypeSelect.val()){
  998. openerp.web.notification.do_warn("Atencion", "Tienes que seleccionar el tipo de pago para continuar .");
  999. bankTypeSelect.css('border-color','red');
  1000. bankTypeSelect.focus();
  1001. return false;
  1002. }
  1003. bankTypeSelect.css('border-color','#ccc');
  1004. /**
  1005. * [Verificar Datos de Operación bancarias]
  1006. */
  1007. var fieldsBankRequired = self.verifyFields().shift();
  1008. if (fieldsBankRequired) {
  1009. var fields = $('.expired-account-modal').find('.'+fieldsBankRequired.field);
  1010. if (fieldsBankRequired.required) {
  1011. openerp.web.notification.do_warn("Atencion", "El campo "+fieldsBankRequired.label+" es obligatorio.");
  1012. fields.css('border-color','red');
  1013. fields.focus();
  1014. return false;
  1015. }
  1016. }
  1017. /**
  1018. * [Verificar Operacion bancarias]
  1019. */
  1020. var fieldsPayments = _.map(self.fieldsBank, function(map){
  1021. return map.field
  1022. });
  1023. if ((_.contains(fieldsPayments, 'payments-bank-id')) && (_.contains(fieldsPayments, 'payments-number')) && (_.contains(fieldsPayments, 'payments-number-cta'))){
  1024. var paymentsBankId = $('.expired-account-modal').find('.payments-bank-id');
  1025. var paymentsNumber = $('.expired-account-modal').find('.payments-number');
  1026. var paymentsNumberCta = $('.expired-account-modal').find('.payments-number-cta');
  1027. if (!!bankId && !!paymentsNumber.val() && paymentsNumberCta.val() && !(typePayments.allow_duplicate_operation)) {
  1028. var chechNumberCh = self.checkNumber(bankId, paymentsNumberCta.val().trim(), paymentsNumber.val().trim()).shift();
  1029. if (! self.verifyOperacionBank(chechNumberCh, amountPayments, currencyId, typePayments))
  1030. return false;
  1031. }
  1032. }
  1033. /* */
  1034. var bankOperation = {};
  1035. var fiedsConcat = '{';
  1036. var contobjetc=0
  1037. _.each(self.fieldsBank, function(item, index, list) {
  1038. var fieldwidget = $('.expired-account-modal').find('.'+item.field);
  1039. var fieldsValue = undefined;
  1040. if(!!fieldwidget.val())
  1041. fieldsValue = '"'+fieldwidget.val()+'"';
  1042. if (_.contains(['many2one', 'many2many', 'one2many'], item.type)) {
  1043. fieldsValue = parseInt(fieldwidget.val().trim());
  1044. if (item.searchType === 'autocomplete') {
  1045. var valueFieds = fieldwidget.val().split('-');
  1046. fieldsValue = parseInt(valueFieds[0].trim());
  1047. }
  1048. }
  1049. if (_.contains(['float','int'], item.type)){
  1050. fieldsValue = instanceWeb.unFormatCurrency(fieldwidget.val());
  1051. if (fieldsValue <= 0)
  1052. fieldsValue = "";
  1053. }
  1054. if (!!fieldsValue){
  1055. if(contobjetc > 0)
  1056. fiedsConcat = fiedsConcat.concat(',');
  1057. fiedsConcat = fiedsConcat.concat('"'+item.name+'": '+fieldsValue);
  1058. contobjetc++
  1059. }
  1060. });
  1061. fiedsConcat = fiedsConcat.concat('}');
  1062. bankOperation = JSON.parse(fiedsConcat)
  1063. if (bankOperation) {
  1064. bankOperation.bank_payments_type_id = parseInt(bankTypeSelect.val())
  1065. }
  1066. /* Save object */
  1067. savePayments = {
  1068. 'invoiceId': self.accountInvoice[0].id,
  1069. 'JournalId': journal[0].id,
  1070. 'partnerId': self.resPartner[0].id ,
  1071. 'amountPayments': self.movePayments[0].amountResidual < paymentsAmount ? self.movePayments[0].amountResidual : paymentsAmount,
  1072. 'moveLines': self.movePayments[0].ids,
  1073. 'JournalType': journal[0].type,
  1074. 'statementId': !!statementSelect.val() ? parseInt(statementSelect.val()) : '',
  1075. 'bankPayments': bankOperation,
  1076. 'voucherName' : !!($('.expired-account-modal').find('.voucher-name').val()).trim() ?$('.expired-account-modal').find('.voucher-name').val() : '',
  1077. 'voucherObs' : !!($('.expired-account-modal').find('.voucher-obs').val()).trim() ?$('.expired-account-modal').find('.voucher-obs').val() : '',
  1078. 'voucherSeq': self.accountInvoice[0].seq_invoice,
  1079. 'datePayments': dateOperation.val(),
  1080. };
  1081. /* Save Payments */
  1082. $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','flex');
  1083. self.savePaymentsInvoice(savePayments).then(function(resultsPayments) {
  1084. return resultsPayments;
  1085. }).then(function(resultsPayments) {
  1086. self.reloadPage();
  1087. $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','none');
  1088. self.removeModal(e);
  1089. if (!resultsPayments)
  1090. results = false;
  1091. });
  1092. defer.resolve(results);
  1093. });
  1094. /* Cerrar */
  1095. $('.expired-account-modal').on('hidden.bs.modal', function(e) {
  1096. results = false;
  1097. defer.resolve(results);
  1098. self.removeModal(e);
  1099. });
  1100. return defer;
  1101. },
  1102. /* Verificar Operation Bank */
  1103. verifyOperacionBank: function(chechNumberCh, amountPayments, currencyId, typePayments){
  1104. var self = this;
  1105. var paymentsChequeTypeId = $('.expired-account-modal').find('.payments-cheque-type-id');
  1106. var paymentsNameHolder = $('.expired-account-modal').find('.payments-name-holder');
  1107. var paymentsAmountTotal = $('.expired-account-modal').find('.payments-amount-total');
  1108. var paymentsDateMaturity = $('.expired-account-modal').find('.payments-date-maturity');
  1109. /* Clear */
  1110. if (!chechNumberCh) {
  1111. if (paymentsChequeTypeId.length) {
  1112. paymentsChequeTypeId.removeAttr("disabled");
  1113. paymentsChequeTypeId.css('background-color', 'white');
  1114. }
  1115. if (paymentsNameHolder.length) {
  1116. paymentsNameHolder.removeAttr("disabled");
  1117. paymentsNameHolder.css('background-color', 'white');
  1118. }
  1119. if (paymentsAmountTotal.length) {
  1120. paymentsAmountTotal.removeAttr("disabled");
  1121. paymentsAmountTotal.css('background-color', 'white');
  1122. }
  1123. if (paymentsDateMaturity.length) {
  1124. paymentsDateMaturity.val(moment().format("YYYY-MM-DD"));
  1125. paymentsDateMaturity.removeAttr("disabled");
  1126. paymentsDateMaturity.css('background-color', 'white');
  1127. }
  1128. return true
  1129. }
  1130. if(chechNumberCh.state !== 'available') {
  1131. openerp.web.notification.do_warn("Atencion", ""+typePayments.name+" no disponible ");
  1132. return false;
  1133. }
  1134. if (paymentsChequeTypeId.length) {
  1135. var classPayments =((paymentsChequeTypeId[0].className).trim()).split(" ");
  1136. var typeCheque = chechNumberCh.chequeTypeId;
  1137. if (_.contains(classPayments, 'ui-autocomplete-input')){
  1138. var chequeTypeValue = self.getBankChequeType(parseInt(chechNumberCh.chequeTypeId)).shift();
  1139. if (chequeTypeValue)
  1140. typeCheque = chequeTypeValue.id+" - "+chequeTypeValue.name;
  1141. }
  1142. paymentsChequeTypeId.val(typeCheque);
  1143. paymentsChequeTypeId.attr("disabled", true);
  1144. paymentsChequeTypeId.css('background', '#eee');
  1145. }
  1146. if (paymentsNameHolder.length) {
  1147. paymentsNameHolder.val(chechNumberCh.nameHolder);
  1148. paymentsNameHolder.attr("disabled", true);
  1149. paymentsNameHolder.css('background', '#eee');
  1150. }
  1151. if (paymentsAmountTotal.length) {
  1152. paymentsAmountTotal.val(instanceWeb.formatCurrency(chechNumberCh.amountTotal, currencyId));
  1153. paymentsAmountTotal.attr("disabled", true);
  1154. paymentsAmountTotal.css('background', '#eee');
  1155. }
  1156. if (paymentsDateMaturity.length) {
  1157. paymentsDateMaturity.val(chechNumberCh.dateMaturity);
  1158. paymentsDateMaturity.attr("disabled", true);
  1159. paymentsDateMaturity.css('background', '#eee');
  1160. }
  1161. var paymentsAmount = instanceWeb.unFormatCurrency(amountPayments.val());
  1162. var totalBank = 0;
  1163. var amountBank = 0;
  1164. var amountRefund = 0;
  1165. totalBank = chechNumberCh.amountTotal;
  1166. /* factura ventas */
  1167. if ((self.accountInvoice[0].type === 'out_invoice') || (self.accountInvoice[0].type === 'in_refund')) {
  1168. amountBank = chechNumberCh.amountReceipt;
  1169. if (self.accountInvoice[0].type === 'in_refund')
  1170. amountRefund = chechNumberCh.amountReceipt;
  1171. }
  1172. /*factura compras/gastos */
  1173. if ((self.accountInvoice[0].type === 'in_invoice') || (self.accountInvoice[0].type === 'out_refund')) {
  1174. amountBank = chechNumberCh.amountPayment;
  1175. if (self.accountInvoice[0].type === 'out_refund')
  1176. amountRefund = chechNumberCh.amountPayment;
  1177. }
  1178. /* verificar saldo disponible */
  1179. if (totalBank <= amountBank) {
  1180. openerp.web.notification.do_warn("Atencion", typePayments.name + " sin saldo disponible.");
  1181. return false;
  1182. }
  1183. /* verificar si el monto a pagar no es mayor al monto disponible */
  1184. amountBalanceBank = (totalBank - amountBank);
  1185. var amountBalanceBankFoirmat = instanceWeb.formatCurrency(amountBalanceBank, currencyId);
  1186. if (paymentsAmount > amountBalanceBank) {
  1187. openerp.web.notification.do_warn("Atencion", "El monto a pagar supera al saldo disponible del.\n Saldo disponible = "+amountBalanceBankFoirmat);
  1188. amountPayments.css('border-color','red');
  1189. amountPayments.focus();
  1190. return false;
  1191. }
  1192. /* Focus button 'Guaradar' */
  1193. $('.expired-account-modal').find('.save-payments-button').focus();
  1194. return true
  1195. },
  1196. /* Verify Bank Field */
  1197. verifyFields: function(){
  1198. var self = this;
  1199. return _.filter(self.fieldsBank, function(item) {
  1200. var field = $('.expired-account-modal').find('.'+item.field);
  1201. field.css('border-color','#ccc');
  1202. return item.required && !(field.val().trim());
  1203. });
  1204. },
  1205. /* Guaradar Pagos */
  1206. savePaymentsInvoice: function(savePayments) {
  1207. var self = this;
  1208. var invoiceUpdate = new openerp.web.Model('account.invoice');
  1209. return invoiceUpdate.call('save_payments_invoice',[savePayments], {
  1210. context: new openerp.web.CompoundContext()
  1211. });
  1212. },
  1213. });
  1214. if (openerp.web && openerp.web.FormView) {
  1215. openerp.web.FormView.include({
  1216. load_record: function(record) {
  1217. this._super.apply(this, arguments);
  1218. if (this.model !== 'account.invoice')
  1219. return;
  1220. openerp.parentInstancePaymentsInvoices = this;
  1221. if (record.state !== 'open')
  1222. return;
  1223. if (openerp.widgetInstancePaymentsInvoices) {
  1224. openerp.widgetInstancePaymentsInvoices.updateId(record.id);
  1225. if (this.$el.find('.button-payments-invoices').length !== 0 )
  1226. return ;
  1227. }
  1228. if (this.$el.find('.button-payments-invoices').length !== 0 )
  1229. return;
  1230. openerp.widgetInstancePaymentsInvoices = new openerp.EiruPaymentsInvoices(this);
  1231. var element =this.$el.find('.oe_form').find('.eiru-payments-invoices');
  1232. openerp.widgetInstancePaymentsInvoices.appendTo(element[0]);
  1233. openerp.widgetInstancePaymentsInvoices.updateId(record.id);
  1234. }
  1235. });
  1236. }
  1237. })();