123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- function report_crmtask(reporting){
- "use strict";
- var instance = openerp;
- reporting.ReportCrmTaskWidget = reporting.Base.extend({
- template:'ReportCrmTask',
- Crm: [],
- CrmTask: [],
- content:[],
- rowsData :[],
- modules:[],
- events:{
- 'click #toolbar > button' : 'clickOnAction',
- 'click #X' : 'factSearch',
- 'click #A' : 'factSearch',
- 'click #B' : 'factSearch',
- 'click #C' : 'factSearch',
- 'click #D' : 'factSearch',
- 'click #Z' : 'factSearch',
- 'click #Y' : 'factSearch',
- 'click #done' : 'factSearch',
- 'click #cancel' : 'factSearch',
- 'click #pending' : 'factSearch',
- 'click #current-type' : 'factSearch',
- 'click #W' : 'factSearch',
- 'click #customer' : 'factSearch',
- 'click #task' : '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:"Registro de Cliente",
- type: 'ir.actions.act_window',
- res_model: "res.partner",
- views: [[false,'form']],
- target: 'new',
- domain: [['id','=', row.partner_id]],
- context: {},
- flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
- res_id: row.partner_id,
- });
- }
- if (field === 'activity'){
- this.do_action({
- name:"Registro de Tareas",
- type: 'ir.actions.act_window',
- res_model: "crm.task",
- views: [[false,'form']],
- target: 'new',
- domain: [['id','=', row.id]],
- context: {},
- flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
- res_id: row.id,
- });
- }
- e.stopImmediatePropagation();
- },
- submitForm: function () {
- var self = this;
- self.fecthIrModuleModule().then(function(modules){
- self.modules = modules;
- return modules;
- }).then(function(modules){
- return self.fetchCrmTask();
- }).then(function(CrmTask) {
- self.CrmTask = CrmTask;
- return self.fetchTaskType();
- }).then(function (TaskType) {
- self.TaskType = TaskType;
- self.$el.find('#current-type').append('<option value="9999999">Todas los tipos</option>');
- _.each(TaskType,function(item){
- self.$el.find('#current-type').append('<option value="' + item.id + '">' + item.name + '</option>');
- });
- return self.fetchCrm();
- }).then(function (Crm) {
- self.Crm = Crm;
- return self.fetchResPartner();
- }).then(function(ResPartner){
- self.ResPartner = ResPartner;
- self.search();
- self.searchTaskType();
- 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;
- }
- },
- fetchCrmTask: function () {
- var self = this;
- var defer = $.Deferred();
- var modules = self.checkModel('eiru_crm');
- if (modules.length <= 0){
- self.showMensaje('eiru_crm');
- return defer;
- }
- var CrmTask = new instance.web.Model('crm.task');
- CrmTask.query(['id', 'partner_id', 'name', 'date_create', 'description', 'opportunity_id', 'task_type_id', 'user_id', 'state','date_action_next']).filter([['active', '=', true]]).all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- fetchTaskType: function () {
- var self = this;
- var defer = $.Deferred();
- var TaskType = new instance.web.Model('crm.task.type');
- TaskType.query(['id', 'name']).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;
- });
- },
- getCrmTask: function (id) {
- var self = this;
- return _.filter(self.CrmTask,function (item) {
- return item.id == id;
- });
- },
- searchTaskType: function () {
- var self = this;
- var results = self.TaskType;
- results = _.map(results, function (item) {
- return {
- label: item.id + '-'+ item.name,
- value: item.id + '-'+ item.name
- }
- });
- self.$('#task').autocomplete({
- source: results,
- minLength:0,
- search: function(event, ui) {
- if (!(self.$('#task').val())){
- self.factSearch();
- }
- },
- close: function( event, ui ) {
- self.factSearch();
- },
- select: function(event, ui) {
- self.factSearch();
- }
- });
- },
- 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();
- }
- });
- },
- BuildTable: function(){
- var self = this;
- var crmtask = self.CrmTask;
- var invoice;
- var Crm;
- var taskType;
- var stage;
- var data = [];
- _.each(crmtask, function(item){
- if(item.state=='pending'){
- stage = 'Pendiente'
- }else{
- if(item.state=='done'){
- stage = 'Realizado'
- }else{
- stage = 'Cancelado'
- }
- }
- invoice = self.getCrmTask(item.id).shift();
- Crm = self.getCrm(item.id);
- // taskType = self.getTaskType(item.task_type_id);
- data.push({
- id : item.id,
- opportunity_id : self.valorNull(item.opportunity_id),
- partner: self.valorNull(item.partner_id[1]),
- description: self.valorNull(item.description),
- activity: self.valorNull(item.name),
- create_date: moment(item.date_create).format("DD/MM/YYYY"),
- date: moment(item.date_create).format("YYYY-MM-DD"),
- user: item.user_id[1],
- task_type_id: item.task_type_id[0],
- next_date: moment(item.date_action_next).format("DD/MM/YYYY"),
- task_name: item.task_type_id[1],
- stage: stage,
- partner_id : item.partner_id[0]
- });
- });
- self.content = data;
- this.loadTable(data);
- },
- factSearch: function(){
- var self = this;
- var today = moment().format('YYYY-MM-DD');
- var yesterday = moment().add(-1, 'days').format('YYYY-MM-DD');
- var month = moment().format('YYYY-MM');
- var last_month = moment().add(-1, 'months').format('YYYY-MM');
- var desde = this.$el.find('#from').val();
- var hasta = this.$el.find('#to').val();
- var partner= this.$el.find('#partner').val().split('-');
- var task= this.$el.find('#current_task').val().split('-');
- var content = self.content;
- if ($('#A').is(":checked")){
- content = _.filter(content, function (inv){
- return moment(inv.date_create).format('YYYY-MM-DD') == today;
- });
- }
- if ($('#B').is(":checked")){
- content = _.filter(content, function (inv){
- return moment(inv.date_create).format('YYYY-MM-DD') == yesterday;
- });
- }
- if ($('#C').is(":checked")){
- content = _.filter(content, function (inv){
- return moment(inv.date_create).format('YYYY-MM') == month;
- });
- }
- if ($('#D').is(":checked")){
- content = _.filter(content, function (inv){
- return moment(inv.date_create).format('YYYY-MM') == last_month;
- });
- }
- 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');
- }
- if (partner != ""){
- content = _.filter(content, function(inv){
- return inv.partner_id == partner[0];
- });
- }
- if (task != ""){
- content = _.filter(content, function(inv){
- return inv.task_type_id == task[0];
- });
- }
- if ($('#pending').is(":checked")){
- content = _.filter(content, function (inv){
- return inv.stage == 'Pendiente';
- });
- }
- if ($('#done').is(":checked")){
- content = _.filter(content, function (inv){
- return inv.stage == 'Realizado';
- });
- }
- if ($('#cancel').is(":checked")){
- content = _.filter(content, function (inv){
- return inv.stage == 'Cancelado';
- });
- }
- 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: {
- create_date : {columnWidth: '8px'},
- partner : {columnWidth: '8px'},
- activity : {columnWidth: '8px'},
- user : {columnWidth: '8px'},
- description : {columnWidth: '8px'},
- task_name: {columnWidth: '8px'},
- stage : {columnWidth: '8px'}
- },
- margin: { top: 16, horizontal: 7},
- addPageContent: function (data) {
- pdfDoc.setFontSize(12);
- pdfDoc.setFontStyle('bold');
- pdfDoc.setTextColor(40);
- pdfDoc.text('Histórico de Tareas 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 Tareas CRM.pdf')
- },
- });
- }
|