main.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. openerp.pagare_crifin = function (instance, local) {
  2. local.widgetInstance = null;
  3. local.parentInstance = null;
  4. local.PagareCrifinWidget = instance.Widget.extend({
  5. template : "pagare_crifin.PagareCrifin",
  6. jsonDoc:[],
  7. init:function(parent){
  8. this._super(parent);
  9. },
  10. updateId : function(id){
  11. var self = this;
  12. self.id=id;
  13. },
  14. start: function () {
  15. var self = this;
  16. this.$el.click(function (e) {
  17. self.fecthInitial();
  18. });
  19. },
  20. valorNull:function(dato){
  21. var valor ="";
  22. if (dato){
  23. if(dato == true && typeof dato == 'boolean'){
  24. valor=" ";
  25. }else{
  26. valor=dato;
  27. }
  28. }
  29. return valor;
  30. },
  31. fecthInitial: function(){
  32. var id= openerp.webclient._current_state.id;
  33. var self = this;
  34. self.fetchAccountInvoice(id).then(function(AccountInvoice){
  35. return AccountInvoice;
  36. }).then(function(AccountInvoice){
  37. self.AccountInvoice = AccountInvoice;
  38. return self.fetchAccountInvoiceQuota(id);
  39. }).then(function(AccountInvoiceQuota){
  40. self.AccountInvoiceQuota = AccountInvoiceQuota;
  41. return self.fetchAccountInvoiceLine();
  42. }).then(function(AccountInvoiceLine){
  43. self.AccountInvoiceLine = AccountInvoiceLine;
  44. return self.drawPDF();
  45. });
  46. return false;
  47. },
  48. fetchAccountInvoice: function(id){
  49. var domain=[['id','=', id]];
  50. var AccountInvoice = new instance.web.Model('account.invoice');
  51. return AccountInvoice.call('getAccountInvoicePagare',[domain], {
  52. context: new instance.web.CompoundContext()
  53. });
  54. },
  55. fetchAccountInvoiceQuota: function(id){
  56. var domain=[['id','=', id]];
  57. var AccountInvoice = new instance.web.Model('account.invoice');
  58. return AccountInvoice.call('getAccountInvoicePagareQuota',[domain], {
  59. context: new instance.web.CompoundContext()
  60. });
  61. },
  62. fetchAccountInvoiceLine: function () {
  63. var self = this;
  64. var invoice_ids = _.flatten(_.map(self.AccountInvoice,function(map){
  65. return map.id;
  66. }));
  67. var domain=[['invoice_id','in',invoice_ids]];
  68. var AccountInvoiceLine = new instance.web.Model('account.invoice.line');
  69. return AccountInvoiceLine.call('getAccountInvoiceLinePagare',[domain], {
  70. context: new instance.web.CompoundContext()
  71. });
  72. },
  73. drawPDF:function(){
  74. var self = this;
  75. var AccountInvoice = self.AccountInvoice;
  76. var CurrencyBase = self.AccountInvoice[0].currency_id[0];
  77. var docItem = [];
  78. var docQuotaItem = [];
  79. var getColumns = [];
  80. var getColumnsQuota = [];
  81. var pdfDoc = new jsPDF("p","mm","a4");
  82. pdfDoc.addImage("data:image/png;base64," + AccountInvoice[0].company_id[0].logo, 'PNG',10,10,20,15);
  83. _.each(self.AccountInvoiceLine, function(item){
  84. docItem.push({
  85. name : item.name,
  86. quantity : item.quantity,
  87. price_unit : accounting.formatMoney(item.price_unit,'',CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
  88. price_subtotal : accounting.formatMoney(item.price_subtotal,'',CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
  89. });
  90. });
  91. getColumns.push({
  92. title : 'Descripción',
  93. dataKey: 'name'
  94. });
  95. getColumns.push({
  96. title : 'Cantidad',
  97. dataKey: 'quantity'
  98. });
  99. getColumns.push({
  100. title : 'Precio Unitario',
  101. dataKey: 'price_unit'
  102. });
  103. getColumns.push({
  104. title : 'subtotal',
  105. dataKey: 'price_subtotal'
  106. });
  107. pdfDoc.autoTable(getColumns, docItem, {
  108. theme: 'grid',
  109. styles: {
  110. overflow: 'linebreak',
  111. columnWidth: 'auto',
  112. fontSize: 7
  113. },
  114. headerStyles: {
  115. textColor: 20,
  116. fillColor: null,
  117. lineWidth: 0.1,
  118. fontSize: 9
  119. },
  120. columnStyles: {
  121. name : {columnWidth: 'auto'},
  122. quantity : {columnWidth: 30, halign:'right'},
  123. price_unit : {columnWidth: 30, halign:'right'},
  124. price_subtotal : {columnWidth: 30, halign:'right'},
  125. },
  126. margin: { top: 80, horizontal: 10},
  127. addPageContent: function (data) {
  128. pdfDoc.setFontSize(10);
  129. pdfDoc.setFontStyle('normal');
  130. pdfDoc.setTextColor(20);
  131. pdfDoc.text(40, 13,'Empresa: ');
  132. pdfDoc.text(60, 13, AccountInvoice[0].company_id[0].name);
  133. pdfDoc.setFontSize(10);
  134. pdfDoc.setFontStyle('normal');
  135. pdfDoc.setTextColor(20);
  136. pdfDoc.text(120, 13,'Número de Operación: ');
  137. pdfDoc.text(160, 13, AccountInvoice[0].origin);
  138. pdfDoc.setFontSize(10);
  139. pdfDoc.setFontStyle('normal');
  140. pdfDoc.setTextColor(20);
  141. pdfDoc.text(120, 18,'Número de Documento: ');
  142. pdfDoc.text(160, 18, AccountInvoice[0].number);
  143. pdfDoc.setFontSize(10);
  144. pdfDoc.setFontStyle('normal');
  145. pdfDoc.setTextColor(20);
  146. pdfDoc.text(120, 23,'Responsable: ');
  147. pdfDoc.text(145, 23, AccountInvoice[0].user_name);
  148. // Cuadro principal
  149. pdfDoc.rect(10, 30, pdfDoc.internal.pageSize.getWidth() - 20 , 40, 'S');
  150. // Cuadro fecha de emision
  151. pdfDoc.rect(10, 30, 80, 10, 'S');
  152. pdfDoc.setFontSize(8);
  153. pdfDoc.setFontStyle('normal');
  154. pdfDoc.setTextColor(20);
  155. pdfDoc.text(12, 36,'Fecha de emisión: ');
  156. pdfDoc.text(45, 36, moment(AccountInvoice[0].date_invoice).format('DD/MM/YYYY'));
  157. // RUC / Documento de identidad No.
  158. pdfDoc.rect(10, 40, pdfDoc.internal.pageSize.getWidth() - 20, 10, 'S');
  159. pdfDoc.text(12, 46,'RUC / Documento de Identidad No.: ' + AccountInvoice[0].partner_id[0].ruc);
  160. // Nombre o Razon Social
  161. pdfDoc.rect(10, 50, pdfDoc.internal.pageSize.getWidth() - 20, 10, 'S');
  162. pdfDoc.text(12, 56,'Nombre o Razón Social: ' + AccountInvoice[0].partner_id[0].name);
  163. // Telefono
  164. pdfDoc.rect(10, 60, 95, 10, 'S');
  165. pdfDoc.text(12, 66,'Teléfono: ' + self.valorNull(AccountInvoice[0].partner_id[0].phone));
  166. // Dirreccion
  167. pdfDoc.rect(105, 60, 95, 10, 'S');
  168. pdfDoc.text(107, 66,'Direccion: ' + self.valorNull(AccountInvoice[0].partner_id[0].address));
  169. }
  170. });
  171. pdfDoc.setFontSize(8);
  172. pdfDoc.setFontStyle('normal');
  173. pdfDoc.text(10,75,'Referencias Personales:');
  174. i=0;
  175. _.each(AccountInvoice[0].partner_id[0].ref_personal_ids,function(item){
  176. pdfDoc.setFontSize(8);
  177. pdfDoc.setFontStyle('normal');
  178. pdfDoc.text(50+i,75, '' + item.name);
  179. i=60;
  180. });
  181. _.each(self.AccountInvoiceQuota, function(item){
  182. docQuotaItem.push({
  183. date : moment(item.date).format('DD/MM/YYYY'),
  184. name : item.name,
  185. amount : accounting.formatMoney(item.amount,'',CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
  186. });
  187. });
  188. getColumnsQuota.push({
  189. title : 'Fecha',
  190. dataKey: 'date'
  191. });
  192. getColumnsQuota.push({
  193. title : 'Descripción',
  194. dataKey: 'name'
  195. });
  196. getColumnsQuota.push({
  197. title : 'Valor de la Cuota',
  198. dataKey: 'amount'
  199. });
  200. var finalY = pdfDoc.autoTable.previous.finalY;
  201. pdfDoc.autoTable(getColumnsQuota, docQuotaItem, {
  202. theme: 'grid',
  203. startY: finalY + 20,
  204. styles: {
  205. overflow: 'linebreak',
  206. columnWidth: 'auto',
  207. fontSize: 7,
  208. },
  209. headerStyles: {
  210. textColor: 20,
  211. fillColor: null,
  212. lineWidth: 0.1,
  213. fontSize: 9
  214. },
  215. columnStyles: {
  216. date : {columnWidth: 'auto', halign: 'center'},
  217. name : {columnWidth: 'auto', halign: 'center'},
  218. amount : {columnWidth: 'auto', halign: 'right'}
  219. },
  220. margin: {horizontal: 10},
  221. addPageContent: function (data) {
  222. pdfDoc.setFontSize(10);
  223. pdfDoc.setFontStyle('bold');
  224. pdfDoc.setTextColor(40);
  225. pdfDoc.text(85,finalY + 15,'Información de Cuotas ');
  226. pdfDoc.setFontSize(10);
  227. pdfDoc.setFontStyle('bold');
  228. pdfDoc.setTextColor(40);
  229. pdfDoc.text(10,finalY + 5,'Total: ' + accounting.formatMoney(AccountInvoice[0].amount_total,CurrencyBase.symbol,CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator));
  230. }
  231. });
  232. pdfDoc.addPage();
  233. pdfDoc.setFontSize(15);
  234. pdfDoc.setFontStyle('bold');
  235. pdfDoc.setTextColor(40);
  236. pdfDoc.text(80,10,'PAGARE A LA ORDEN');
  237. pdfDoc.setFontSize(9);
  238. pdfDoc.setFontStyle('normal');
  239. pdfDoc.setTextColor(40);
  240. pdfDoc.text(10,30,'Número de Operación: ' + AccountInvoice[0].origin);
  241. pdfDoc.text(110,30,'Monto a pagar: ' + accounting.formatMoney(AccountInvoice[0].amount_total,CurrencyBase.symbol,CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator));
  242. pdfDoc.text(10,35,'Fecha: ' + moment(AccountInvoice[0].date_invoice).format('DD/MM/YYYY'));
  243. var total_in_letters = instance.web.num2word(AccountInvoice[0].amount_total);
  244. pdfDoc.text(10,45,'Pagaré a ' + AccountInvoice[0].company_id[0].name + ' o a su orden el monto de Guaraníes: ' + total_in_letters);
  245. var paragraph="Por este PAGARÉ A LA ORDEN, me(nos) obligo(amos) a PAGAR a la firma CRIFIN CRÉDITOS E INVERSIÓN SOCIEDAD ANONIMA con Ruc Nº 80102929-5 o a su orden, en la calle Alder Richard Miño C/ Teodoro Mongelos del Bº Pacu-Cua. Queda expresamente convenido entre CRIFIN CRÉDITOS E INVERSIÓN SOCIEDAD ANONIMA (el acreedor) y el(los) deudor(es), que la falta de pago a su vencimiento del pagaré, producirá la caducidad automática y el decaimiento anticipado de los plazos establecidos en todos los demás pagaré o documentos o cuotas vencidas, cualquiera sea su naturaleza, causa u origen y causará de pleno derecho el vencimiento anticipado de los pagaré o documentos o cuotas no vencidas, facultando a CRIFIN CRÉDITOS E INVERSIÓN SOCIEDAD ANONIMA a exigir el pago inmediato del saldo total de la deuda. La mora se producirá por el mero vencimiento del plazo, sin necesidad de protesto ni de ningún requerimiento judicial o extrajudicial por parte de CRIFIN CRÉDITOS E INVERSIÓN SOCIEDAD ANONIMA (Art. 424 C.C.). En caso de mora, las cantidades adeudadas devengarán un interés moratorio del 3% mensual como intereses compensatorios y será computada desde el día de la mora hasta el día del pago efectivo del total de la obligación principal y sus intereses, sin que ello implique novación, prórroga o espera. El interés moratorio será calculado sobre el saldo de la deuda vencida y en ningún caso podrá capitalizase intereses moratorios ni punitorios. Toda la obligación a cargo de los deudores y que se encontrare vencida e impaga, facultará a CRIFIN CRÉDITOS E INVERSIÓN SOCIEDAD ANONIMA, además, a percibir un interés punitorio adicional cuya tasa no podrá exceder el treinta por ciento (30%) de la tasa a percibirse en concepto de interés moratorio. El interés punitorio, de percibirse, solamente será calculado sobre el saldo de la deuda vencida, de conformidad a lo dispuesto en el Artículo primero de la Ley Nº 2339 de la fecha 26 de diciembre de 2003, que modifica el Art. 44 de la Ley Nº 489/95. Por el presente instrumento les autorizo en forma expresa e irrevocable, otorgando suficiente mandato en los términos del Art. 917 Inc. A, del Código Civil, Para que en caso de un atraso superior a los 90 días en el pago del presente crédito o de cualquier otra deuda pendiente que mantenga con el acreedor de este pagaré, incluyan mi nombre persona o Razón Social que represento, en el Registro General de Morosos de Inforcomf, (Equifax S.A.) Esta Autorización se extiende a fin de que pueda proveerse la información a terceros interesados. Una vez cancelada la deuda en capital, gastos e interés, la eliminación de dicho registro se realizará de acuerdo a lo dispuesto en la ley Nº 1682/01 y su modificación Ley Nº 1969/02 y 5543/2015. Declaramos expresamente, con carácter irrevocable que las firmas puestas en el pie de este instrumento me/nos obliga/n con carácter irrevocable al cumplimiento de todas y cada una de las cuotas establecidas y al condicionamiento general obrante en el pagaré. A Todos los efectos legales se conviene expresamente la jurisdicción de los Tribunales del Paraguay. Se fija domicilio real y especial en los lugares señalados más abajo, donde se tendrán por válidas, como personales las notificaciones que llegaren a practicar, aun cuando fueren hechas por telegrama colacionada.";
  246. pdfDoc.text(paragraph,10,50,{maxWidth:188,align:'justify'});
  247. pdfDoc.setFontSize(10);
  248. pdfDoc.setFontStyle('bold');
  249. pdfDoc.setTextColor(40);
  250. pdfDoc.text(10,160,'DEUDOR');
  251. pdfDoc.text(110,160,'CO-DEUDOR');
  252. pdfDoc.setFontSize(9);
  253. pdfDoc.setFontStyle('normal');
  254. pdfDoc.setTextColor(40);
  255. pdfDoc.text(10,170,'Nombre y Apellido: ' + AccountInvoice[0].partner_id[0].name);
  256. pdfDoc.text(110,170,'Nombre y Apellido:');
  257. pdfDoc.text(10,175,'RUC / DNI: ' + self.valorNull(AccountInvoice[0].partner_id[0].ruc));
  258. pdfDoc.text(110,175,'RUC / DNI:');
  259. pdfDoc.text(10,180,'Domicilio: ' + self.valorNull(AccountInvoice[0].partner_id[0].address));
  260. pdfDoc.text(110,180,'Domicilio:');
  261. pdfDoc.text(10,185,'Telefono: ' + self.valorNull(AccountInvoice[0].partner_id[0].phone));
  262. pdfDoc.text(110,185,'Telefono:');
  263. pdfDoc.text(10,190,'Celular: ' + self.valorNull(AccountInvoice[0].partner_id[0].mobile));
  264. pdfDoc.text(110,190,'Celular:');
  265. pdfDoc.save('pagare.pdf');
  266. },
  267. });
  268. if (instance.web && instance.web.FormView) {
  269. instance.web.FormView.include({
  270. load_form: function (record) {
  271. this._super.apply(this, arguments);
  272. if (this.model !== 'account.invoice') return;
  273. local.parentInstance = this;
  274. if (local.widgetInstance) {
  275. local.widgetInstance.updateId(record.id);
  276. }
  277. local.widgetInstance = new local.PagareCrifinWidget(this);
  278. var elemento = this.$el.find('.oe_form').find('.pagare_button_box');
  279. local.widgetInstance.appendTo(elemento);
  280. local.widgetInstance.updateId(record.id);
  281. }
  282. });
  283. }
  284. };