report_supplier.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. function report_supplier(reporting){
  2. "use strict";
  3. var model = openerp;
  4. reporting.ReportSupplierWidget = reporting.Base.extend({
  5. template: 'ReportSupplier',
  6. rowsData :[],
  7. content :[],
  8. events:{
  9. 'click #toolbar > button' : 'clickOnAction',
  10. 'click #generate' : 'fetchGenerate',
  11. 'click-row.bs.table #table' : 'clickAnalysisDetail',
  12. },
  13. init : function(parent){
  14. this._super(parent);
  15. },
  16. start: function () {
  17. var table = this.$el.find('#table');
  18. table.bootstrapTable({data : self.rowsData});
  19. var date = new reporting.ReportDatePickerWidget(self);
  20. date.fecthFecha();
  21. this.fetchInitial();
  22. },
  23. valorNull:function(dato){
  24. var valor = "";
  25. if (dato){
  26. valor = dato;
  27. }
  28. return valor;
  29. },
  30. clickAnalysisDetail: function(e, row, $element,field){
  31. if (field == 'name'){
  32. this.do_action({
  33. name:"Registro de Cliente",
  34. type: 'ir.actions.act_window',
  35. res_model: "res.partner",
  36. views: [[false,'form']],
  37. target: 'new',
  38. domain: [['id','=', row.id]],
  39. context: {},
  40. flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
  41. res_id: row.id,
  42. });
  43. }
  44. e.stopImmediatePropagation();
  45. },
  46. fetchInitial: function () {
  47. var self = this;
  48. this.fetchResUser().then(function(ResUser) {
  49. return ResUser;
  50. }).then(function (ResUser) {
  51. self.ResUser = ResUser;
  52. return self.fetchResCompany();
  53. }).then(function(ResCompany){
  54. self.ResCompany = ResCompany;
  55. if(ResCompany.length > 1){
  56. self.$el.find('#current-company').append('<option value="9999999">Todas las empresas</option>');
  57. _.each(ResCompany,function(item){
  58. self.$el.find('#current-company').append('<option value="' + item.id + '">' + item.name + '</option>');
  59. });
  60. }else{
  61. self.$el.find('.company').css('display','none');
  62. }
  63. return self.fetchResCurrency();
  64. }).then(function(ResCurrency){
  65. self.ResCurrency = ResCurrency;
  66. });
  67. self.$el.find('#generate').css('display','inline');
  68. return;
  69. },
  70. fetchGenerate: function () {
  71. var self = this;
  72. self.$el.find('.search-form').block({
  73. message: null,
  74. overlayCSS: {
  75. backgroundColor: '#FAFAFA'
  76. }
  77. });
  78. self.$el.find('.report-form').block({
  79. message: null,
  80. overlayCSS: {
  81. backgroundColor: '#FAFAFA'
  82. }
  83. });
  84. this.fetchResPartner().then(function(ResPartner) {
  85. return ResPartner;
  86. }).then(function (ResPartner) {
  87. self.ResPartner = ResPartner;
  88. return self.BuildTable();
  89. });
  90. },
  91. /*=====================================================================
  92. USER
  93. =====================================================================*/
  94. fetchResUser: function() {
  95. var self = this;
  96. var defer = $.Deferred();
  97. var fields = ['id','name','store_id'];
  98. var domain = [['id','=',self.session.uid]];
  99. var ResUser = new model.web.Model('res.users');
  100. ResUser.query(fields).filter(domain).all().then(function (results) {
  101. defer.resolve(results);
  102. });
  103. return defer;
  104. },
  105. /*====================================================================
  106. RES PARTNER
  107. ====================================================================*/
  108. fetchResPartner: function() {
  109. var self = this;
  110. var state = self.$el.find('#current-state').val();
  111. var company = self.$el.find('#current-company').val();
  112. var type = self.$el.find('#current-type').val();
  113. var domain = [['active', '=', true], ['supplier', '=', true]];
  114. if(state == 'with'){
  115. domain.push(['debit','<',0]);
  116. }
  117. if(state == 'without'){
  118. domain.push(['debit','=',0]);
  119. }
  120. if(company && company != 9999999){
  121. domain.push(['company_id','=',parseInt(company)]);
  122. }
  123. if(type == 'company'){
  124. domain.push(['is_company','=',true]);
  125. }
  126. if(type == 'people'){
  127. domain.push(['is_company','!=',true]);
  128. }
  129. var ResPartner = new model.web.Model('res.partner');
  130. return ResPartner.call('getResPartner',[domain], {
  131. context: new model.web.CompoundContext()
  132. });
  133. },
  134. /*====================================================================
  135. RES COMPANY
  136. ====================================================================*/
  137. fetchResCompany: function(){
  138. var self = this;
  139. var defer = $.Deferred();
  140. var currency = new model.web.Model('res.company');
  141. var field=['id','name','currency_id','logo'];
  142. currency.query(field).filter().all().then(function(results){
  143. defer.resolve(results);
  144. });
  145. return defer;
  146. },
  147. /*====================================================================
  148. RES CURRENCY
  149. ====================================================================*/
  150. fetchResCurrency : function(){
  151. var self = this;
  152. var defer = $.Deferred();
  153. var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
  154. var domain = [['active', '=', true]];
  155. var ResCurrency = new model.web.Model('res.currency');
  156. ResCurrency.query(fields).filter(domain).all().then(function(results) {
  157. defer.resolve(results);
  158. });
  159. return defer;
  160. },
  161. /*====================================================================
  162. GET RES COMPANY
  163. ====================================================================*/
  164. getResCompany: function (id) {
  165. var self = this;
  166. return _.filter(self.ResCompany,function (item) {
  167. return item.id == id;
  168. })
  169. },
  170. /*====================================================================
  171. GET RES CURRENCY BASE
  172. ====================================================================*/
  173. getResCurrency: function (id) {
  174. var self = this;
  175. return _.filter(self.ResCurrency,function (item) {
  176. return item.id === id;
  177. })
  178. },
  179. /*====================================================================
  180. BUILD
  181. ====================================================================*/
  182. BuildTable: function(){
  183. var self = this;
  184. var data = [];
  185. var company = $('#current-company').val();
  186. if(company && company != 9999999){
  187. var ResCompany = self.getResCompany(company).shift();
  188. var CurrencyBase = self.getResCurrency(ResCompany.currency_id[0]).shift();
  189. }else{
  190. var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
  191. }
  192. var ResPartner = self.ResPartner;
  193. _.each(ResPartner, function(item){
  194. data.push({
  195. id : item.id,
  196. ruc : self.valorNull(item.ruc),
  197. name : item.name,
  198. street : self.valorNull(item.street),
  199. city : self.valorNull(item.city),
  200. phone : self.valorNull(item.phone),
  201. mobile : self.valorNull(item.mobile),
  202. email : self.valorNull(item.email),
  203. property_product_pricelist_purchase : self.valorNull(item.property_product_pricelist_purchase),
  204. debit : accounting.formatMoney(item.debit, '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
  205. amount : item.debit,
  206. /*==============================
  207. TOTAL FOOTER CONFIGURATION
  208. ==============================*/
  209. decimal_places : CurrencyBase.decimal_places,
  210. thousands_separator: CurrencyBase.thousands_separator,
  211. decimal_separator: CurrencyBase.decimal_separator,
  212. });
  213. });
  214. self.content = data;
  215. self.loadTable(data);
  216. self.$el.find('.report-form').css('display','block');
  217. self.$el.find('.search-form').unblock();
  218. self.$el.find('.report-form').unblock();
  219. },
  220. /*====================================================================
  221. LOAD BOOTSTRAP TABLE
  222. ====================================================================*/
  223. loadTable:function(rowsTable){
  224. var self = this;
  225. self.rowsData = rowsTable;
  226. var table = this.$el.find('#table');
  227. table.bootstrapTable('load', rowsTable);
  228. },
  229. /*====================================================================
  230. PRINT PDF
  231. ====================================================================*/
  232. clickOnAction: function (e) {
  233. var self = this;
  234. var ResCompany;
  235. var action = this.$el.find(e.target).val();
  236. var company = $('#current-company').val();
  237. if(company && company != 9999999){
  238. ResCompany = self.getResCompany(company).shift();
  239. var CurrencyBase = self.getResCurrency(ResCompany.currency_id[0]).shift();
  240. }else{
  241. ResCompany = self.ResCompany[0];
  242. var CurrencyBase = self.getResCurrency(self.ResCompany[0].currency_id[0]).shift();
  243. }
  244. var getColumns=[];
  245. var rows=[];
  246. var table = this.$el.find("#table");
  247. var column = table.bootstrapTable('getVisibleColumns');
  248. var row = table.bootstrapTable('getData');
  249. var amount = totalFormatter(row);
  250. row.push({
  251. ruc: 'Total',
  252. debit: amount,
  253. })
  254. if (action === 'pdf') {
  255. var data = _.map(column, function (val){ return val.field});
  256. _.each(_.map(column,function(val){
  257. return val}), function(item){
  258. getColumns.push([{
  259. title: item.title,
  260. dataKey: item.field
  261. }]);
  262. });
  263. /*
  264. ============================================================
  265. CONFIGURACION DEL PDF
  266. ============================================================
  267. */
  268. var pdf_title = 'Proveedores.';
  269. var pdf_type = 'l';
  270. var pdf_name = 'proveedores_';
  271. var pdf_columnStyles = {
  272. ruc :{columnWidth: 20, halign:'left'},
  273. name :{halign:'left'},
  274. street :{halign:'left'},
  275. city:{halign:'left'},
  276. phone : {columnWidth: 30, halign:'left'},
  277. mobile :{columnWidth: 30, halign:'left'},
  278. email:{columnWidth: 30, halign:'left'},
  279. property_product_pricelist_purchase:{columnWidth: 30, halign:'center'},
  280. debit:{columnWidth: 20, halign:'right'},
  281. };
  282. /*
  283. ============================================================
  284. LLAMAR FUNCION DE IMPRESION
  285. ============================================================
  286. */
  287. var filter = self.getFilter();
  288. var pdf = new reporting.ReportPdfWidget(self);
  289. pdf.drawPDF(
  290. _.flatten(getColumns),
  291. row,
  292. ResCompany,
  293. pdf_title,
  294. pdf_type,
  295. pdf_name,
  296. pdf_columnStyles,
  297. filter,
  298. );
  299. }
  300. },
  301. getFilter: function(){
  302. var self = this;
  303. var company = self.$el.find('#current-company').val();
  304. var state = self.$el.find('#current-state').val();
  305. var type = self.$el.find('#current-type').val();
  306. var filter = [];
  307. if(company && company != 9999999){
  308. var ResCompany = _.filter(self.ResCompany, function(item){
  309. return item.id == company;
  310. });
  311. filter.push({
  312. title:'Empresa',
  313. value: ResCompany[0].name,
  314. });
  315. }
  316. if(state && state != 9999999){
  317. filter.push({
  318. title: 'Estado',
  319. value: $("#current-state option:selected").text(),
  320. })
  321. }
  322. if(type && type != 9999999){
  323. filter.push({
  324. title: 'Tipo de Proveedor',
  325. value: $('#current-type option:selected').text(),
  326. })
  327. }
  328. return filter;
  329. },
  330. });
  331. }