function report_phonecall(reporting){ "use strict"; var instance = openerp; reporting.ReportPhoneCallWidget = reporting.Base.extend({ template:'ReportPhoneCall', Crm: [], CrmPhone: [], content:[], rowsData :[], modules:[], events:{ 'click #toolbar > button' : 'clickOnAction', 'click #volver_btn' : 'volver', 'click #X' : 'factSearch', 'click #A' : 'factSearch', 'click #B' : 'factSearch', 'click #C' : 'factSearch', 'click #D' : 'factSearch', 'click #Z' : 'factSearch', 'click #Y' : 'factSearch', 'click #customer' : 'factSearch', 'change #from' : 'factSearch', 'change #to' : 'factSearch', 'click-row.bs.table #table ' : 'clickAnalysisDetail', }, init : function(parent){ this._super(parent); }, start: function () { var self = this; var table = this.$el.find('#table'); table.bootstrapTable({data : self.rowsData}); this.fecthFecha(); this.submitForm(); }, // Redirecionar renderReport: function () { var self = this; var container = this.$el.closest('.oe_form_sheet.oe_form_sheet_width'); this.$el.closest('.report_view').remove(); container.find('.report_view').show({ effect: 'fade', duration: 200, }); }, // Verificar el modelo checkModel : function(model){ var self = this; return _.filter(self.modules,function(item){return item.name === model}); }, // Lanzar el mensaje showMensaje : function(modelos){ var self = this; $("#dialog" ).dialog({ autoOpen: true, resizable: false, modal: true, title: 'Atención', width: 500, open: function() { $(this).html('Reporte in-disponible, contacte con el administrador del sistema ref : '+modelos); }, show: { effect: "fade", duration: 200 }, hide: { effect: "fade", duration: 200 }, buttons: { Aceptar: function() { $(this).dialog('close'); self.renderReport() } } }); return }, valorNull:function(dato){ var valor =""; if (dato){ valor=dato; } return valor; }, clickAnalysisDetail: function(e, row, $element, field){ if (field == 'partner'){ this.do_action({ name:"CRM Llamadas", type: 'ir.actions.act_window', res_model: "crm.phonecall", views: [[false,'form']], target: 'new', domain: [['id','=', row.id]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, res_id: row.id, }); } if (field === 'opportunity_id'){ this.do_action({ name:"Registro", type: 'ir.actions.act_window', res_model: "crm.lead", views: [[false,'form']], target: 'new', domain: [['id','=', row.partner_id]], context: {}, flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}}, res_id: row.partner_id, }); } e.stopImmediatePropagation(); }, submitForm: function () { var self = this; self.fecthIrModuleModule().then(function(modules){ self.modules = modules; return modules; }).then(function(modules){ return self.fetchCrmPhone(); }).then(function(CrmPhone) { self.CrmPhone = CrmPhone; return self.fetchCrm(); }).then(function (Crm) { self.Crm = Crm; return self.fetchResPartner(); }).then(function(ResPartner){ self.ResPartner = ResPartner; self.search(); return self.BuildTable(); }); }, // Modelos instalados fecthIrModuleModule: function(){ var self = this; var defer = $.Deferred(); var fields = ['name','id']; var domain=[['state','=','installed']]; var irModule = new instance.web.Model('ir.module.module'); irModule.query(fields).filter(domain).all().then(function(results){ defer.resolve(results); }); return defer; }, fecthFecha: function() { var to; var dateFormat1 = "mm/dd/yy", from = $( "#from" ) .datepicker({ dateFormat: "dd/mm/yy", changeMonth: true, numberOfMonths: 1, }) .on( "change", function() { to.datepicker( "option", "minDate", getDate(this), "dd/mm/yyyy"); }); to = $( "#to" ).datepicker({ dateFormat: "dd/mm/yy", defaultDate: "+7d", changeMonth: true, numberOfMonths: 1, }) .on( "change", function() { from.datepicker( "option", "maxDate", getDate(this)); }); function getDate( element ) { var fechaSel =element.value.split('/'); var date; try { date = $.datepicker.parseDate( dateFormat1, (fechaSel[1]+"/"+fechaSel[0]+"/"+fechaSel[2])); } catch( error ) { date = null; } return date; } }, fetchCrmPhone: function () { var self = this; var defer = $.Deferred(); var modules = self.checkModel('crm'); if (modules.length <= 0){ self.showMensaje('crm'); return defer; } var CrmPhone = new instance.web.Model('crm.phonecall'); CrmPhone.query(['id', 'partner_id', 'name', 'date', 'opportunity_id', 'partner_mobile', 'user_id', 'state']).filter([['active', '=', true]]).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchCrm: function () { var self = this; var defer = $.Deferred(); var Crm = new instance.web.Model('crm.lead'); Crm.query(['id', 'partner_id', 'name', 'description', 'create_date', 'user_id', 'stage_id', 'type']).filter([['active', '=', true]]).all().then(function(results){ defer.resolve(results); }); return defer; }, fetchResPartner: function () { var self = this; var defer = $.Deferred(); var ResPartner = new instance.web.Model('res.partner'); ResPartner.query(['id','name','ruc']).filter([['active', '=', true]]).all().then(function(results){ defer.resolve(results); }); return defer; }, getCrm: function (id) { var self = this; return _.filter(self.Crm,function (item) { return item.opportunity_id == id; }); }, getCrmPhone: function (id) { var self = this; return _.filter(self.CrmPhone,function (item) { return item.id == id; }); }, search: function () { var self = this; var results = self.ResPartner; results = _.map(results, function (item) { return { label: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc), value: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc) } }); self.$('#partner').autocomplete({ source: results, minLength:0, search: function(event, ui) { if (!(self.$('#partner').val())){ self.factSearch(); } }, close: function( event, ui ) { self.factSearch(); }, select: function(event, ui) { self.factSearch(); } }); }, // volver volver: function(){ this.$el.find('#volver_btn').empty(); this.$el.find('.bootstrap-table').show({ effect: 'drop', direction: 'down', duration: 200, }); }, BuildTable: function(){ var self = this; var crmphone = self.CrmPhone; var invoice; var Crm; var data = []; _.each(crmphone, function(item){ invoice = self.getCrmPhone(item.id).shift(); Crm = self.getCrm(item.id); data.push({ id : item.id, opportunity_id : self.valorNull(item.opportunity_id), partner: self.valorNull(Crm.partner_id), description: self.valorNull(item.name), create_date: moment(item.date).format("DD/MM/YYYY"), date: moment(item.date).format("YYYY-MM-DD"), user: item.user_id[1], stage: item.state, partner_id : item.partner_id[0] }); }); self.content = data; this.loadTable(data); }, factSearch: function(){ var self = this; var hoy = moment().format('YYYY-MM-DD'); var desde = this.$el.find('#from').val(); var hasta = this.$el.find('#to').val(); var partner= this.$el.find('#partner').val().split('-'); var content = self.content; if ($('#A').is(":checked")){ content = _.filter(content, function (inv){ return inv.date == hoy; }); } if ($('#B').is(":checked")){ var date = hoy.split('-'); var ayer = date[2] - 1; date.splice(2,0); if(date[2] < 10){ date[2] = '0'+ayer; }else{ date[2] = ayer; } content = _.filter(content, function (inv){ return inv.date == date[0]+'-'+date[1]+'-'+date[2]; }); } if ($('#C').is(":checked")){ var date = hoy.split('-'); content = _.filter(content, function (inv){ var mes = inv.date.split('-'); return mes[0]+'-'+mes[1] == date[0]+'-'+date[1]; }); } if ($('#D').is(":checked")){ var date = hoy.split('-'); var mes = date[1] - 1; var year; date.splice(1,0); if(date[1] == 1){ date[1] = '12'; year = date[0] - 1; date[0] = year; }else{ if(date[1] < 10){ date[1] = '0'+mes; }else{ date[1] = mes; } } content = _.filter(content, function (inv){ var mes = inv.date.split('-'); return mes[0]+'-'+mes[1] == date[0]+'-'+date[1]; }); } if ($('#Z').is(":checked")){ $('#datepicker').css('display','block'); if (desde.length > 0){ var date= desde.split('/'); content = _.filter(content, function (inv){ return inv.date >= (date[2]+"-"+date[1]+"-"+date[0]); }); } if (hasta.length > 0){ var date= hasta.split('/'); content = _.filter(content, function (inv){ return inv.date <= (date[2]+"-"+date[1]+"-"+date[0]); }); } }else{ $('#datepicker').css('display','none'); } this.$el.find('#volver_btn').append(selector); this.$el.find('.bootstrap-table').hide({ effect: 'drop', direction: 'up', duration: 200, complete: function () { } }); this.$el.find('#toolbar').hide({ effect: 'drop', direction: 'up', duration: 200, complete: function () { } }); if (partner != ""){ content = _.filter(content, function(inv){ return inv.partner_id == partner[0]; }); } self.loadTable(content) }, loadTable:function(rowsTable){ var self = this; self.rowsData = rowsTable; var table = this.$el.find('#table'); table.bootstrapTable('load',rowsTable); }, getObjetPdf: function(rowsTable){ var self = this; var rowsPdf=[]; var rows=[]; var rows = self.rowsData; return rows; }, clickOnAction: function (e) { var self = this; var rowsNew; var action = self.$el.find(e.target).val(); var table = self.$el.find("#table"); var data2 = table.bootstrapTable('getVisibleColumns'); var getColumns=[]; var rows=[]; rowsNew = self.getObjetPdf(); if (action === 'pdf') { var dataNEW = _.map(data2, function (val){ return val.field; }); _.each(rowsNew,function (item){ rows.push(_.pick(item, dataNEW)); }); // Obtener los nombre de la Cabecera _.each(_.map(data2,function(val){ return val; }), function(item){ getColumns.push([{ title: item.title, dataKey: item.field }]); }); this.drawPDF(_.flatten(getColumns),rows); } }, drawPDF: function (getColumns,rows) { var self = this; var desde =(this.$el.find('#from').val()); var hasta =(this.$el.find('#to').val()); var totalPagesExp = "{total_pages_count_string}"; var pdfDoc = new jsPDF(); pdfDoc.autoTable(getColumns, rows, { styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'}, columnStyles: { opportunity_id : {columnWidth: '8px'}, partner : {columnWidth: '8px'}, description : {columnWidth: '8px'}, date : {columnWidth: '8px'}, stage : {columnWidth: '8px'}, user : {columnWidth: '8px'} }, margin: { top: 16, horizontal: 7}, addPageContent: function (data) { pdfDoc.setFontSize(12); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text('Histórico de llamadas de crm ', data.settings.margin.left, 10); if(desde.length > 0 || hasta.length > 0){ var fecha=''; if(desde){ fecha=fecha.concat(' Desde '+desde); } if (hasta){ fecha=fecha.concat(' Hasta '+hasta); } pdfDoc.setFontSize(10); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40) pdfDoc.text(fecha, data.settings.margin.left,14); } // FOOTER var str = "Pagina " + data.pageCount; // Total page number plugin only available in jspdf v1.0+ if (typeof pdfDoc.putTotalPages === 'function') { str = str + " de " + totalPagesExp; } pdfDoc.setFontSize(9); pdfDoc.setFontStyle('bold'); pdfDoc.setTextColor(40); pdfDoc.text(str, data.settings.margin.left, pdfDoc.internal.pageSize.height - 5); } }); if (typeof pdfDoc.putTotalPages === 'function') { pdfDoc.putTotalPages(totalPagesExp); } pdfDoc.save('Histórico de llamadas crm.pdf') }, }); }