edit_pagare_golden.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. (function(){
  2. "use strict";
  3. var QWeb = openerp.web.qweb;
  4. var number = openerp.web;
  5. openerp.edit_pagare_golden = {};
  6. openerp.edit_pagare_golden.MovePrintGoldenWidget = openerp.Widget.extend({
  7. template: "edit_pagare_golden.MovePrintGolden",
  8. accountInvoice:[],
  9. moveLine:[],
  10. currencyRate:[],
  11. resPartner:[],
  12. moveLineReconcile:[],
  13. pagare:[],
  14. doc:[],
  15. init: function (parent, id) {
  16. this._super(parent);
  17. // this.id = id;
  18. },
  19. start: function () {
  20. var self = this;
  21. this.$el.click(function (e) {
  22. self.fecthInitial();
  23. });
  24. },
  25. // inicial
  26. fecthInitial: function(){
  27. var self= this;
  28. var id =openerp.webclient._current_state.id;
  29. this.fetchCurency().then(function(Currency){
  30. self.currencyRate=Currency;
  31. return Currency;
  32. }).then(function(Currency){
  33. return self.fetchInvoice(parseInt(id));
  34. }).then(function(invoice){
  35. self.accountInvoice = invoice;
  36. return self.fetchMoveLine(invoice);
  37. }).then(function(moveline){
  38. self.moveLine = moveline;
  39. return self.fetchMoveLineReconcile(moveline);
  40. }).then(function(moveRecocile){
  41. self.moveLineReconcile=moveRecocile;
  42. return self.fetchPartner();
  43. }).then(function(partner){
  44. self.resPartner = partner;
  45. return self.drawJSON();
  46. }).then(function(doc){
  47. self.doc = doc;
  48. return self.fetchJoint();
  49. });
  50. return false;
  51. },
  52. // Buscar Cambio de Monedas USD,PYG,ARG,BRL
  53. fetchCurency: function (id_currency) {
  54. var defer = $.Deferred();
  55. var currency_Rate = new openerp.web.Model('res.currency.rate');
  56. var fields = ['currency_id', 'rate'];
  57. var domain = [['currency_id', '=', [166 , 20, 7, 3]]];
  58. currency_Rate.query(fields).filter(domain).all().then(function (results) {
  59. defer.resolve(results);
  60. });
  61. return defer;
  62. },
  63. // Account invoice
  64. fetchInvoice: function(id) {
  65. var defer = $.Deferred();
  66. var invoice = new openerp.web.Model('account.invoice');
  67. var fields = ['id', 'number', 'currency_id', 'partner_id', 'date_invoice','move_line_debt'];
  68. var domain = [['id', '=', id]];
  69. invoice.query(fields).filter(domain).all().then(function (results) {
  70. defer.resolve(results);
  71. });
  72. return defer;
  73. },
  74. // Move Line
  75. fetchMoveLine: function(invoice){
  76. var defer = $.Deferred();
  77. var id_move = _.flatten(_.map(invoice,function(item){return item.move_line_debt}));
  78. var moveLine = new openerp.web.Model('account.move.line');
  79. var fields = ['id', 'debit','credit','date_maturity','currency_id','company_id','reconcile_partial_id','ref'];
  80. var domain = [['id', '=', id_move]];
  81. moveLine.query(fields).filter(domain).order_by("id").all().then(function(results){
  82. defer.resolve(results);
  83. });
  84. return defer;
  85. },
  86. // Move Line Reconcile
  87. fetchMoveLineReconcile: function(move){
  88. var defer = $.Deferred();
  89. var id_reco = _.flatten(_.map(move,function(item){return item.reconcile_partial_id[0]}));
  90. var moveLine = new openerp.web.Model('account.move.line');
  91. var fields = ['id', 'debit','credit','date_maturity','currency_id','company_id','reconcile_partial_id'];
  92. var domain = [['reconcile_partial_id', '=', id_reco],['credit', '>', 0]];
  93. moveLine.query(fields).filter(domain).all().then(function(results){
  94. defer.resolve(results);
  95. });
  96. return defer;
  97. },
  98. // Partner
  99. fetchPartner: function(){
  100. var defer = $.Deferred();
  101. var defer = $.Deferred();
  102. var partner_ids = _.flatten(_.map(this.accountInvoice,function(item){return item.partner_id[0]}));
  103. var resPartner = new openerp.web.Model('res.partner');
  104. var fields =['id','name','phone','mobile','ruc', 'street'];
  105. var domain =[['id', '=', partner_ids]];
  106. resPartner.query(fields).filter(domain).all().then(function(results){
  107. defer.resolve(results);
  108. });
  109. return defer;
  110. },
  111. // Obtener EL JSON
  112. drawJSON: function(){
  113. var defer = $.Deferred();
  114. $.getJSON('/edit_pagare_golden/static/src/json/pagare.json').then(function(doc){
  115. defer.resolve(doc);
  116. });
  117. return defer;
  118. },
  119. // Juntar datos
  120. fetchJoint: function(){
  121. var self = this;
  122. var lineReconcile;
  123. var item;
  124. var partner;
  125. var rate;
  126. var invoice;
  127. invoice = this.accountInvoice.shift();
  128. partner=this.resPartner.shift();
  129. if (!partner){
  130. partner={};
  131. partner.name="";
  132. partner.street="";
  133. partner.ruc =" ";
  134. partner.phone="";
  135. partner.mobile="";
  136. }else{
  137. if (!partner.name){partner.name=""};
  138. if (!partner.street){partner.street=""};
  139. if (!partner.ruc){partner.ruc =" "};
  140. if (!partner.phone){partner.phone=""};
  141. if (!partner.mobile){partner.mobile=""};
  142. }
  143. for (var i = 0; i < self.moveLine.length; i++) {
  144. item = self.moveLine[i];
  145. // Reconcile parcial
  146. lineReconcile = self.getLineReconcile(item.reconcile_partial_id[0]);
  147. if(!lineReconcile){
  148. lineReconcile={};
  149. lineReconcile.credit=0;
  150. }
  151. //Rate(cambio)
  152. rate=self.getRate(item.currency_id[0]);
  153. if (!rate){
  154. rate={};
  155. rate.rate=1;
  156. rate.currency_id = 3;
  157. rate.currency_simbol= "USD";
  158. rate.simbol="$";
  159. rate.currency_name="Dolares";
  160. }
  161. self.pagare.push({number: invoice.number,
  162. pagar : accounting.formatNumber(((item.debit * rate.rate)-(lineReconcile.credit *rate.rate)), 2, ".", ","),
  163. date_invoice : self.formatDate(invoice.date_invoice),
  164. vencimiento: self.formatDate(item.date_maturity),
  165. company_id_name : item.company_id[1],
  166. montoletras : number.num2word(((item.debit * rate.rate)-(lineReconcile.credit *rate.rate))),
  167. partner_name : partner.name,
  168. street_res : partner.street,
  169. ruc_res : partner.ruc,
  170. phone_res : partner.phone,
  171. mobile_res : partner.mobile,
  172. credit : (lineReconcile.credit * rate.rate),
  173. debit : (item.debit * rate.rate),
  174. company_id : item.company_id[0],
  175. currency_simbol:rate.simbol,
  176. currecy_name : rate.currency_name,
  177. page : i+1+"/"+self.moveLine.length
  178. });
  179. }
  180. self.drawPDF();
  181. },
  182. formatDate: function(date){
  183. var fechaSel =date.split('-');
  184. return (fechaSel[2]+"/"+fechaSel[1]+"/"+fechaSel[0]);
  185. },
  186. // Get Reconile parcial
  187. getLineReconcile: function(id){
  188. return _.filter(this.moveLineReconcile, function(item){return item.reconcile_partial_id[0] === id}).shift();
  189. },
  190. // Get rate
  191. getRate: function(id){
  192. var rate;
  193. _.each(_.filter(this.currencyRate, function(item){return item.currency_id[0] === id}), function(item){
  194. rate={};
  195. rate.rate=item.rate;
  196. rate.currency_id = item.currency_id[0];
  197. rate.currency_simbol= item.currency_id[1];
  198. if (item.currency_id[1] == 'PYG'){
  199. rate.simbol='Gs';
  200. rate.currency_name='Guaraníes';
  201. }
  202. if (item.currency_id[1] == 'USD'){
  203. rate.simbol="$";
  204. rate.currency_name='Dolares';
  205. }
  206. });
  207. return rate;
  208. },
  209. // Generar impresion
  210. drawPDF: function(){
  211. var item;
  212. var self =this;
  213. var pdfDoc = new jsPDF();
  214. for (var i = 0; i < self.pagare.length; i++) {
  215. item=self.pagare[i];
  216. if (i > 0){
  217. pdfDoc.addPage();
  218. }
  219. _.each(self.doc, function(doc){
  220. var texto =_.template(doc.content)(item);
  221. pdfDoc.setFontSize(doc.size);
  222. pdfDoc.setFontStyle(doc.fontStyle);
  223. pdfDoc.text(doc.x, doc.y, pdfDoc.splitTextToSize(texto, 180), null, null, doc.position);
  224. });
  225. }
  226. // pdfDoc.output('dataurlnewwindow');
  227. pdfDoc.save('Pagare.pdf');
  228. self.deletObjet();
  229. },
  230. // Limpiar los Obejto
  231. deletObjet:function(){
  232. var self=this;
  233. self.accountInvoice=[];
  234. self.moveLine=[];
  235. self.currencyRate=[];
  236. self.resPartner=[];
  237. self.moveLineReconcile=[];
  238. self.pagare =[];
  239. self.doc =[];
  240. },
  241. });
  242. if(openerp.web && openerp.web.FormView) {
  243. openerp.web.FormView.include({
  244. load_form: function(){
  245. if (this.model === 'account.move.line') {
  246. var padre = this.$el.closest('.oe_notebook_page');
  247. var hijo = padre.find('.oe_form_group.table-bordered');
  248. // var id =openerp.webclient._current_state.id;
  249. if (hijo) {
  250. var moveprint = new openerp.edit_pagare_golden.MovePrintGoldenWidget(this);
  251. moveprint.insertBefore(hijo);
  252. }
  253. }
  254. return this._super.apply(this, arguments);
  255. }
  256. });
  257. }
  258. })();