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('');
_.each(TaskType,function(item){
self.$el.find('#current-type').append('');
});
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')
},
});
}