Selaa lähdekoodia

FIX ADD Agregado report cuentas a pagar y a cobrar y contratos de clientes

Sebas 6 vuotta sitten
vanhempi
commit
6097b145a0

+ 5 - 0
static/src/js/configuration_reporting.js

@@ -48,6 +48,11 @@ function configuration_reporting (instance, widget) {
                 description: 'Permite realizar un analisis de las facturas de venta.',
                 action: 'ReportSaleInvoiceAnalysis'
             },
+            {
+                title: 'Análisis de Contratos del Cliente',
+                description: 'Permite visualizar un listado de contratos de clientes.',
+                action: 'ReportContratoCliente'
+            },
             {
                 title: 'Ranking Productos más Vendidos',
                 description: 'Permite realizar un analisis de los Productos más Vendidos Sales Order.',

+ 4 - 0
static/src/js/main.js

@@ -43,6 +43,7 @@ openerp.eiru_reporting = function (instance) {
         report_bank_movements(reporting);
         report_ventas_pos_orders(reporting);
         report_sale_cab(reporting);
+        report_contratocliente(reporting);
         report_sale_pos_cab(reporting);
         report_pos_orders(reporting);
 
@@ -83,6 +84,9 @@ openerp.eiru_reporting = function (instance) {
     // Analisis de ventas
     instance.web.client_actions.add('eiru_reporting.sale_action_report', 'instance.eiru_reporting.ReportSaleInvoiceAnalysisWidget');
 
+    // CRM
+    instance.web.client_actions.add('eiru_reporting.contratocliente_action_report', 'instance.eiru_reporting.ReportContratoClienteWidget');
+
     // Ranking de clientes
     instance.web.client_actions.add('eiru_reporting.sale_customer_ranking_action_report', 'instance.eiru_reporting.ReportRankingSalesOrdersCustomerWidget');
 

+ 503 - 0
static/src/js/reports/report_contratocliente.js

@@ -0,0 +1,503 @@
+function report_contratocliente(reporting){
+    "use strict";
+
+    var instance = openerp;
+
+    reporting.ReportContratoClienteWidget = reporting.Base.extend({
+        template:'ReportContratoCliente',
+        ContratoCliente: [],
+        content:[],
+        rowsData :[],
+        modules:[],
+        events:{
+            'click #toolbar > button' : 'clickOnAction',
+            'click #X' : 'factSearch',
+            'click #A' : 'factSearch',
+            'click #B' : 'factSearch',
+            'click #C' : 'factSearch',
+            'click #D' : 'factSearch',
+            'click #cerrado' : 'factSearch',
+            'click #abierto' : 'factSearch',
+            'click #cancelado' : 'factSearch',
+            'click #pendiente' : '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 == 'code'){
+                this.do_action({
+                    name:"Contrato",
+                    type: 'ir.actions.act_window',
+                    res_model: "account.analytic.account",
+                    views: [[false,'form']],
+                    target: 'new',
+                    domain: [['id','=', row.id]],
+                    context: {},
+                    flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
+                    res_id: row.id,
+                });
+            }
+            if (field === 'partner'){
+                this.do_action({
+                    name:"Registro",
+                    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,
+                });
+            }
+
+             e.stopImmediatePropagation();
+        },
+
+        submitForm: function () {
+            var self = this;
+            self.fecthIrModuleModule().then(function(modules){
+                self.modules = modules;
+                return modules;
+            }).then(function(modules){
+                return self.fetchContrato();
+            }).then(function (ContratoCliente) {
+                self.ContratoCliente = ContratoCliente;
+                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;
+            }
+        },
+
+        fetchContrato: function () {
+            var self = this;
+            var defer = $.Deferred();
+            // var modules = self.checkModel('crm');
+            //
+            // if (modules.length <= 0){
+            //     self.showMensaje('crm');
+            //     return defer;
+            // }
+            var filter = [['type','=','contract']];
+            var ContratoCliente = new instance.web.Model('account.analytic.account');
+            ContratoCliente.query(['id', 'create_date', 'code','partner_id', 'name', 'date_start', 'recurring_total_amount', 'remaining_total', 'date', 'state','type']).filter(filter).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;
+        },
+
+        getContratoCliente: function (id) {
+            var self = this;
+            return _.filter(self.ContratoCliente,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();
+                }
+            });
+        },
+
+        BuildTable: function(){
+            var self = this;
+            var ContratoCliente = self.ContratoCliente;
+            var invoice;
+            var state;
+            var data = [];
+            var crm_type;
+
+            _.each(ContratoCliente, function(item){
+                if(item.state=='close'){
+                    state = 'Cerrado'
+                }else
+                    {
+                    if(item.state=='open'){
+                        state = 'En curso'
+                    }else{
+                        if(item.state=='cancelled'){
+                            state = 'Cancelado'
+                        }else{
+                            state = 'Pendiente'
+                        }
+                    }
+                }
+
+                invoice = self.getContratoCliente(item.id).shift();
+                data.push({
+                  id : item.id,
+                  code : self.valorNull(item.code),
+                  create_date: moment(item.create_date).format("DD/MM/YYYY"),
+                  name : self.valorNull(item.name),
+                  partner: item.partner_id[1],
+                  date_start: moment(item.date_start).format("DD/MM/YYYY"),
+                  date_fin: moment(item.date).format("DD/MM/YYYY"),
+                  date: moment(item.create_date).format("YYYY-MM-DD"),
+                  amount_invoiced: accounting.formatNumber(item.recurring_total_amount,0,".",","),
+                  amount_tot: item.recurring_total_amount,
+                  state: state,
+                  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 content = self.content;
+
+            if ($('#A').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return moment(inv.date).format('YYYY-MM-DD') == today;
+                });
+            }
+            if ($('#B').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return moment(inv.date).format('YYYY-MM-DD') == yesterday;
+                });
+            }
+            if ($('#C').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return moment(inv.date).format('YYYY-MM') == month;
+                });
+            }
+            if ($('#D').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return moment(inv.date).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 ($('#cerrado').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'Cerrado';
+                });
+            }
+            if ($('#abierto').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'En curso';
+                });
+            }
+            if ($('#cancelado').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'Cancelado';
+                });
+            }
+            if ($('#pendiente').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'Pendiente';
+                });
+            }
+
+             if (partner != ""){
+                 content = _.filter(content, function(inv){
+                     return inv.partner_id == partner[0];
+                 });
+             }
+
+             var amount_invoiced_tot = _.reduce(_.map(content,function(map){
+                 return(map.amount_tot);
+             }),function(memo, num){
+                 return memo + num;
+             },0);
+
+             content.push({
+                 code: "Total",
+                 amount_invoiced: accounting.formatNumber(amount_invoiced_tot,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: {
+                  code : {columnWidth: '8px'},
+                  date_create : {columnWidth: '8px'},
+                  partner : {columnWidth: '8px'},
+                  name : {columnWidth: '8px'},
+                  date_start: {columnWidth: '7px'},
+                  date_fin: {columnWidth: '7px'},
+                  amount_invoiced: {columnWidth: '7px'},
+                  state : {columnWidth: '8px'}
+                },
+                margin: { top: 16, horizontal: 7},
+
+                addPageContent: function (data) {
+                    pdfDoc.setFontSize(12);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Analisis de contrato de clientes ', data.settings.margin.left, 10);
+                    // var tipo = '';
+                    //
+                    // if ($('#lead').is(":checked")){
+                    //     tipo = tipo.concat(' Tipo de CRM : Iniciativas' );
+                    // }
+                    // if ($('#opportunity').is(":checked")){
+                    //     tipo = tipo.concat(' Tipo de CRM : Oportunidades' );
+                    // }
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40)
+                    pdfDoc.text(6,14,tipo);
+
+                    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('Analisis de contrato de clientes.pdf')
+        },
+    });
+}

+ 41 - 41
static/src/js/reports/report_invoice_balance.js

@@ -416,47 +416,47 @@ function report_invoice_balance (reporting){
             var rows=[];
             var rows = self.rowsData;
 
-            var amount_total_num = _.reduce(_.map(rows,function(map){
-                return(map.amount_total_num);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-
-
-            var entry_num = _.reduce(_.map(rows,function(map){
-                return(map.entry_num);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-
-            var egress_num = _.reduce(_.map(rows,function(map){
-                return(map.egress_num);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-            var to_receive_num = _.reduce(_.map(rows,function(map){
-                return(map.to_receive_num);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-            var to_pay_num = _.reduce(_.map(rows,function(map){
-                return(map.to_pay_num);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-            if (rows.length > 0){
-                rows.push({
-                    number : 'Totales',
-                    partner : '',
-                    date : '',
-                    user : '',
-                    amount_total: accounting.formatNumber(amount_total_num,0,".",","),
-                    entry: accounting.formatNumber(entry_num,0,".",","),
-                    egress: accounting.formatNumber(egress_num,0,".",","),
-                    to_receive: accounting.formatNumber(to_receive_num,0,".",","),
-                    to_pay: accounting.formatNumber(to_pay_num,0,".",","),
-                });
-            }
+            // var amount_total_num = _.reduce(_.map(rows,function(map){
+            //     return(map.amount_total_num);
+            // }),function(memo, num){
+            //     return memo + num;
+            // },0);
+            //
+            //
+            // var entry_num = _.reduce(_.map(rows,function(map){
+            //     return(map.entry_num);
+            // }),function(memo, num){
+            //     return memo + num;
+            // },0);
+            //
+            // var egress_num = _.reduce(_.map(rows,function(map){
+            //     return(map.egress_num);
+            // }),function(memo, num){
+            //     return memo + num;
+            // },0);
+            // var to_receive_num = _.reduce(_.map(rows,function(map){
+            //     return(map.to_receive_num);
+            // }),function(memo, num){
+            //     return memo + num;
+            // },0);
+            // var to_pay_num = _.reduce(_.map(rows,function(map){
+            //     return(map.to_pay_num);
+            // }),function(memo, num){
+            //     return memo + num;
+            // },0);
+            // if (rows.length > 0){
+            //     rows.push({
+            //         number : 'Totales',
+            //         partner : '',
+            //         date : '',
+            //         user : '',
+            //         amount_total: accounting.formatNumber(amount_total_num,0,".",","),
+            //         entry: accounting.formatNumber(entry_num,0,".",","),
+            //         egress: accounting.formatNumber(egress_num,0,".",","),
+            //         to_receive: accounting.formatNumber(to_receive_num,0,".",","),
+            //         to_pay: accounting.formatNumber(to_pay_num,0,".",","),
+            //     });
+            // }
 
             return rows;
         },

+ 29 - 27
static/src/js/reports/report_rrhh.js

@@ -20,8 +20,8 @@ function report_rrhh(reporting){
             'click #B' : 'factSearch',
             'click #C' : 'factSearch',
             'click #D' : 'factSearch',
-            'click #opportunity' : 'factSearch',
-            'click #lead' : 'factSearch',
+            'click #pagado' : 'factSearch',
+            'click #realizado' : 'factSearch',
             'click #Z' : 'factSearch',
 
             'click #Y' : 'factSearch',
@@ -101,7 +101,7 @@ function report_rrhh(reporting){
                     res_id: row.id,
                 });
             }
-            if (field === 'personal'){
+            if (field === 'employee_name'){
                 this.do_action({
                     name:"Registro",
                     type: 'ir.actions.act_window',
@@ -211,9 +211,11 @@ function report_rrhh(reporting){
             var id = _.flatten(_.map(self.resInvoice,function(map){
                 return map.id;
             }));
-            var domain=[['slip_id','in', id],['salary_rule_id', '=', 2]];
+            var domain=[['slip_id', 'in', id],['salary_rule_id', 'in', [4, 2]]];
+            //var domain=['&',('slip_id', 'in', id),('salary_rule_id', 'in', [2, 4])]
+            //var domain=[['slip_id','in', id],'|', ['salary_rule_id', '=', 2], ['salary_rule_id', '=', 2]];
             var InvoiceLine = new instance.web.Model('hr.payslip.line');
-            InvoiceLine.query(['id', 'name', 'slip_id', 'total']).filter(domain).all().then(function (results) {
+            InvoiceLine.query(['id', 'name', 'slip_id', 'total']).filter(domain).order_by('id').all().then(function (results) {
                 defer.resolve(results);
             });
             return defer;
@@ -227,19 +229,12 @@ function report_rrhh(reporting){
             // var domain=[['id','=', employee_id]];
             var Personal = new instance.web.Model('hr.employee');
 
-            Personal.query(fields).filter().order_by('id').all().then(function(results){
+            Personal.query(fields).filter().all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
         },
 
-        // getPartner: function(id){
-        //     var self = this;
-        //     return _.filter(self.resPersonal,function(item){
-        //         return item.id == id;
-        //     });
-        // },
-
         getPartner: function(employee_id){
             var self = this;
             return _.filter(self.resPersonal,function(item){
@@ -303,8 +298,13 @@ function report_rrhh(reporting){
                 invoice = this.getPaySlip(item.id);
                 if(invoice.state=='done'){
                     state = 'Realizado'
-                }else{
-                    state = 'Pagado'
+                }else
+                    {
+                    if(invoice.state=='paid'){
+                        state = 'Pagado'
+                    }else{
+                        state = 'Borrador'
+                    }
                 }
                 employee = self.getPartner(invoice.employee_id[0]);
 
@@ -317,7 +317,8 @@ function report_rrhh(reporting){
                     id : invoice.id,
                     number : self.valorNull(invoice.number),
                     name : self.valorNull(invoice.name),
-                    date: moment(invoice.create_date).format("YYYY-MM-DD"),
+                    date: moment(invoice.create_date).format('YYYY-MM-DD'),
+                    date_create:moment(invoice.create_date).format("DD/MM/YYYY"),
                     reference : invoice.name,
                     date_from : moment(invoice.date_from).format("DD[/]MM[/]YYYY"),
                     date_to : moment(invoice.date_to).format("DD[/]MM[/]YYYY"),
@@ -383,16 +384,16 @@ function report_rrhh(reporting){
                 $('#datepicker').css('display','none');
             }
 
-            // if ($('#lead').is(":checked")){
-            //     content = _.filter(content, function (inv){
-            //         return inv.crm_type == 'lead';
-            //     });
-            // }
-            // if ($('#opportunity').is(":checked")){
-            //     content = _.filter(content, function (inv){
-            //         return inv.crm_type == 'opportunity';
-            //     });
-            // }
+            if ($('#pagado').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'Pagado';
+                });
+            }
+            if ($('#realizado').is(":checked")){
+                content = _.filter(content, function (inv){
+                    return inv.state == 'Realizado';
+                });
+            }
 
              if (personal != ""){
                  content = _.filter(content, function(inv){
@@ -468,12 +469,13 @@ function report_rrhh(reporting){
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
                   number : {columnWidth: '5px'},
+                  date_create : {columnWidth: '10px'},
                   identification : {columnWidth: '8px'},
                   employee_name : {columnWidth: '7px'},
                   reference : {columnWidth: '8px'},
                   date_from : {columnWidth: '10px'},
                   date_to: {columnWidth: '10px'},
-                  amount : {columnWidth: '10px'},
+                  amount : {halign:'right', columnWidth: '10px'},
                   state : {columnWidth: '11px'}
                 },
                 margin: { top: 16, horizontal: 7},

+ 4 - 20
static/src/js/reports/reporting_accountpending.js

@@ -34,7 +34,7 @@ function reporting_accountpending (reporting){
             'click #novencidos' : 'factSearch',
 
             'change #current-journal' : 'factSearch',
-
+            'change #partner': 'factSearch',
             'change #from' : 'factSearch',
             'change #to' : 'factSearch',
             'click #volver_btn': 'volver',
@@ -106,6 +106,7 @@ function reporting_accountpending (reporting){
                 return self.fetchGetModelId();
             }).then(function(modelId) {
                 self.modelId= modelId;
+                self.search();
                 return self.fetchReduceMoveLine();
             });
         },
@@ -201,7 +202,7 @@ function reporting_accountpending (reporting){
             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){
+            ResPartner.query(['id','name','ruc']).filter([['active', '=', true],['customer', '=', true]]).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -262,7 +263,7 @@ function reporting_accountpending (reporting){
             var data = [];
             _.each(MoveLine, function(item){
 
-                invoice = self.getAccountInvoice(item.id);
+                invoice = self.getAccountInvoice(item.invoice[0]);
 
                 data.push({
                     id : item.id,
@@ -368,22 +369,6 @@ function reporting_accountpending (reporting){
             var rows=[];
             var rows = self.rowsData;
 
-            var total_residual = _.reduce(_.map(rows,function(map){
-                return(map.total_residual);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-
-            if (rows.length > 0){
-                rows.push({
-                    reference: "Total a Cobrar",
-                    partner: "",
-                    date_maturity: "",
-                    amount_residual: accounting.formatNumber((total_residual),0,".",","),
-
-                });
-            }
-
             return rows;
         },
         clickOnAction: function (e) {
@@ -424,7 +409,6 @@ function reporting_accountpending (reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
-                    id : {columnWidth: '6px'},
                     reference : {columnWidth: '10px'},
                     partner : {columnWidth: '10px'},
                     date_maturity : {columnWidth: '6px'},

+ 10 - 25
static/src/js/reports/reporting_accountpending_pagar.js

@@ -30,7 +30,7 @@ function reporting_accountpending_pagar (reporting){
             'click #W' : 'factSearch',
             'click #vencidos' : 'factSearch',
             'click #novencidos' : 'factSearch',
-
+            'change #partner': 'factSearch',
             'change #current-journal' : 'factSearch',
 
             'change #from' : 'factSearch',
@@ -56,7 +56,7 @@ function reporting_accountpending_pagar (reporting){
             return valor;
         },
         clickAnalysisDetail: function(e, row, $element, field){
-            if (field == 'reference'){
+            if (field == 'number'){
                 this.do_action({
                     name:"Factura",
                     type: 'ir.actions.act_window',
@@ -104,6 +104,7 @@ function reporting_accountpending_pagar (reporting){
                 return self.fetchGetModelId();
             }).then(function(modelId) {
                 self.modelId= modelId;
+                self.search();
                 return self.fetchReduceMoveLine();
             });
         },
@@ -199,7 +200,7 @@ function reporting_accountpending_pagar (reporting){
             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){
+            ResPartner.query(['id','name','ruc']).filter([['active', '=', true],['supplier', '=', true]]).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -223,6 +224,7 @@ function reporting_accountpending_pagar (reporting){
 
         getAccountInvoice: function (id) {
             var self = this;
+
             return _.filter(self.AccountInvoice,function (item) {
                 return item.invoice[0] == id;
             });
@@ -259,13 +261,12 @@ function reporting_accountpending_pagar (reporting){
             var invoice;
             var data = [];
             _.each(MoveLine, function(item){
-
-                invoice = self.getAccountInvoice(item.id);
+                invoice = self.getAccountInvoice(item.invoice[0]);
 
                 data.push({
                     id : item.id,
                     reference: item.ref,
-                    number: item.number,
+                    number: invoice[0].number,
                     date_maturity: moment(item.date_maturity).format("DD/MM/YYYY"),
                     partner: item.partner_id[1],
                     date: item.date_maturity,
@@ -349,7 +350,7 @@ function reporting_accountpending_pagar (reporting){
             },0);
 
             content.push({
-                reference: "Total",
+                number: "Total a Pagar",
                 amount_residual: accounting.formatNumber((amount_total_amount),0,".",","),
             });
 
@@ -367,22 +368,6 @@ function reporting_accountpending_pagar (reporting){
             var rows=[];
             var rows = self.rowsData;
 
-            var total_residual = _.reduce(_.map(rows,function(map){
-                return(map.total_residual);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-
-            if (rows.length > 0){
-                rows.push({
-                    reference: "Total a Pagar",
-                    partner: "",
-                    date_maturity: "",
-                    amount_residual: accounting.formatNumber((total_residual),0,".",","),
-
-                });
-            }
-
             return rows;
         },
         clickOnAction: function (e) {
@@ -423,7 +408,7 @@ function reporting_accountpending_pagar (reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
-                    id : {columnWidth: '6px'},
+                    number : {columnWidth: '6px'},
                     reference : {columnWidth: '10px'},
                     partner : {columnWidth: '10px'},
                     date_maturity : {columnWidth: '6px'},
@@ -466,7 +451,7 @@ function reporting_accountpending_pagar (reporting){
             if (typeof pdfDoc.putTotalPages === 'function') {
                 pdfDoc.putTotalPages(totalPagesExp);
             }
-            pdfDoc.save('Listado de cuentas a pagar no vencidas.pdf')
+            pdfDoc.save('Listado de cuentas a pagar.pdf')
         },
     });
 }

+ 122 - 0
static/src/reports/report_contratocliente.xml

@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="ReportContratoCliente">
+        <div class="report_view">
+            <div class="reporting_page_header">
+                <h1>Histórico de Contratos de Clientes</h1>
+            </div>
+            <button type="button" class="oe_button oe_form_button oe_highlight" aria-label="Left Align" data-toggle="collapse" href="#collapseExample" aria-expanded="false" aria-controls="collapseExample">FILTRAR
+            </button>
+            <div class="collapse" id="collapseExample">
+                <br/>
+                <div class="row">
+                    <div class="col-xs-6">
+                        <div class="panel panel-default">
+                            <div class="panel-heading">Fechas</div>
+                            <div class="panel-body">
+                                <ul class="list-unstyled">
+                                    <li>
+                                        <input type="radio" name="valores" id="X" value="X" checked="checked"/>
+                                        <label for="X">Sin Filtro</label>
+                                    </li>
+                                    <li>
+                                        <input type="radio" name="valores" id="A" value="A"/>
+                                        <label for="A">Hoy</label>
+                                    </li>
+                                    <li>
+                                        <input type="radio" name="valores" id="B" value="B"/>
+                                        <label for="B">Ayer</label>
+                                    </li>
+                                    <li>
+                                        <input type="radio" name="valores" id="C" value="C"/>
+                                        <label for="C">Mes Actual</label>
+                                    </li>
+                                    <li>
+                                        <input type="radio" name="valores" id="D" value="D"/>
+                                        <label for="D">Mes Pasado</label>
+                                    </li>
+                                    <li>
+                                        <input type="radio" name="valores" id="Z" value="Z"/>
+                                        <label for="Z">Busqueda Avanzada</label>
+                                    </li>
+                                </ul>
+                                <div id="datepicker" style="display:none;" class="container">
+                                    <label for="from">Desde: </label>
+                                    <input type="text"  id="from" name="from"/>
+                                    <label for="to" >Hasta: </label>
+                                    <input type="text"  id="to" name="to" />
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col-xs-6">
+                        <div class="panel panel-default">
+                            <div class="panel-heading">Características</div>
+                            <div class="panel-body">
+                                <div class="form-group">
+                                    <label for="partner">Buscar Cliente:</label>
+                                    <input id="partner" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
+                                </div>
+                                <h3>Por estado</h3>
+                                <ul class="list-unstyled">
+                                    <li>
+                                        <input type="radio" name="tipo" id="Y" value="Y" checked="checked"/>
+                                        <label for="Y">Sin Filtro</label>
+                                        <li>
+                                            <input type="radio" name="tipo" id="abierto" value="abierto"/>
+                                            <label for="abierto">En curso</label>
+                                        </li>
+                                        <li>
+                                            <input type="radio" name="tipo" id="cerrado" value="cerrado"/>
+                                            <label for="cerrado">Cerrado</label>
+                                        </li>
+                                        <li>
+                                            <input type="radio" name="tipo" id="cancelado" value="cancelado"/>
+                                            <label for="cancelado">En curso</label>
+                                        </li>
+                                        <li>
+                                            <input type="radio" name="tipo" id="pendiente" value="pendiente"/>
+                                            <label for="pendiente">Pendiente</label>
+                                        </li>
+                                    </li>
+
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div id="toolbar">
+                <button class="oe_button oe_form_button oe_highlight" value="pdf" id="pdf">PDF</button>
+            </div>
+            <table id="table" class="table_paint_first_row"
+                data-pagination="true"
+                data-toggle="table"
+                data-reorderable-columns="true"
+                data-toolbar="#toolbar"
+                data-show-columns="true"
+                data-buttons-class="oe_button oe_form_button oe_highlight"
+                data-height="auto"
+                data-classes="table table-hover table-condensed"
+                data-row-style="rowStyle"
+                data-search="true">
+                <thead>
+                    <tr>
+                        <th data-field="code" data-sortable="true">Ref.</th>
+                        <th data-field="create_date" data-sortable="true">Fecha</th>
+                        <th data-field="partner">Cliente</th>
+                        <th data-field="name">Descripcion</th>
+                        <th data-field="date_start">Fecha Inicio</th>
+                        <th data-field="date_fin">Fecha Final</th>
+                        <th data-field="amount_invoiced" data-align="right">Monto Cuota</th>
+                        <th data-field="state">Estado</th>
+
+                    </tr>
+                </thead>
+            </table>
+            <canvas></canvas>
+            <div id="dialog"></div>
+        </div>
+    </t>
+    </template>

+ 2 - 2
static/src/reports/report_resumen_ingresos.xml

@@ -57,9 +57,9 @@
                                 <div class="form-group">
                                     <label for="current-journal">Sucursal: </label>
                                     <select id="current-journal" class="form-control ui-autocomplete-input"  name="journal"></select>
-                                    <br/>
+                                    <!-- <br/>
                                     <label for="current-currency">Moneda: </label>
-                                    <select id="current-currency" class="form-control ui-autocomplete-input"  name="currency"></select>
+                                    <select id="current-currency" class="form-control ui-autocomplete-input"  name="currency"></select> -->
                                 </div>
                             </div>
                         </div>

+ 10 - 9
static/src/reports/report_rrhh.xml

@@ -54,22 +54,22 @@
                         <div class="panel panel-default">
                             <div class="panel-heading">Características</div>
                             <div class="panel-body">
-                                <h3>Tipo</h3>
-                                <!-- <ul class="list-unstyled">
+                                <h3>Estado</h3>
+                                 <ul class="list-unstyled">
                                     <li>
                                         <input type="radio" name="tipo" id="Y" value="Y" checked="checked"/>
                                         <label for="Y">Sin Filtro</label>
                                         <li>
-                                            <input type="radio" name="tipo" id="lead" value="lead"/>
-                                            <label for="lead">Iniciativa</label>
+                                            <input type="radio" name="tipo" id="pagado" value="pagado"/>
+                                            <label for="pagado">Pagado</label>
                                         </li>
                                         <li>
-                                            <input type="radio" name="tipo" id="opportunity" value="opportunity"/>
-                                            <label for="opportunity">Oportunidad</label>
+                                            <input type="radio" name="tipo" id="realizado" value="realizado"/>
+                                            <label for="realizado">Realizado</label>
                                         </li>
                                     </li>
 
-                                </ul> -->
+                                </ul>
 
                                 <div class="form-group">
                                     <label for="personal">Buscar Personal:</label>
@@ -96,13 +96,14 @@
                 data-search="true">
                 <thead>
                     <tr>
-                        <th data-field="number" data-sortable="true">Asunto</th>
+                        <th data-field="number" data-sortable="true">Ref.</th>
+                        <th data-field="date_create">Fecha</th>
                         <th data-field="identification">C.I.N°</th>
                         <th data-field="employee_name">Personal</th>
                         <th data-field="reference" data-sortable="true">Descripcion</th>
                         <th data-field="date_from">Desde</th>
                         <th data-field="date_to">Hasta</th>
-                        <th data-field="amount">Monto</th>
+                        <th data-field="amount" data-align="right">Monto</th>
                         <th data-field="state">Estado</th>
                     </tr>
                 </thead>

+ 7 - 8
static/src/reports/reporting_accountpending.xml

@@ -55,7 +55,13 @@
                         <div class="panel panel-default">
                             <div class="panel-heading">Características</div>
                             <div class="panel-body">
-                                <div class="col-xs-6">
+                                <div class="col-xs-12">
+                                    <div class="form-group">
+                                        <label for="partner">Buscar Cliente:</label>
+                                        <input id="partner" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
+                                    </div>
+                                </div>
+                                <div class="col-xs-12">
                                     <h3>Cuentas a Cobrar</h3>
                                     <ul class="list-unstyled">
                                         <li>
@@ -72,12 +78,6 @@
                                         </li>
                                     </ul>
                                 </div>
-                                <div class="col-xs-12">
-                                    <div class="form-group">
-                                        <label for="partner">Buscar Cliente:</label>
-                                        <input id="partner" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
-                                    </div>
-                                </div>
                             </div>
                         </div>
                     </div>
@@ -99,7 +99,6 @@
                 data-search="true">
                 <thead>
                     <tr>
-                        <th data-field="id" data-sortable="true">Id</th>
                         <th data-field="reference" data-sortable="true">Nro Factura</th>
                         <th data-field="partner" data-sortable="true">Cliente</th>
                         <th data-field="date_maturity" data-sortable="true">Vence</th>

+ 9 - 9
static/src/reports/reporting_accountpending_apagar.xml

@@ -54,7 +54,13 @@
                         <div class="panel panel-default">
                             <div class="panel-heading">Características</div>
                             <div class="panel-body">
-                                <div class="col-xs-6">
+                                <div class="col-xs-12">
+                                    <div class="form-group">
+                                        <label for="partner">Buscar Proveedor:</label>
+                                        <input id="partner" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
+                                    </div>
+                                </div>
+                                <div class="col-xs-12">
                                     <h3>Cuentas a Pagar</h3>
                                     <ul class="list-unstyled">
                                         <li>
@@ -71,12 +77,6 @@
                                         </li>
                                     </ul>
                                 </div>
-                                <div class="col-xs-12">
-                                    <div class="form-group">
-                                        <label for="partner">Buscar Proveedor:</label>
-                                        <input id="partner" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
-                                    </div>
-                                </div>
                             </div>
                         </div>
                     </div>
@@ -98,8 +98,8 @@
                 data-search="true">
                 <thead>
                     <tr>
-                        <th data-field="id" data-sortable="true">Id</th>
-                        <th data-field="reference" data-sortable="true">Nro Factura</th>
+                        <th data-field="number" data-sortable="true">Referencia</th>
+                        <th data-field="reference" data-sortable="true">Descripción</th>
                         <th data-field="partner" data-sortable="true">Proveedor</th>
                         <th data-field="date_maturity" data-sortable="true">Vence</th>
                         <th data-field="amount_residual" data-sortable="true" data-align="right">Monto</th>

+ 4 - 0
templates.xml

@@ -29,6 +29,10 @@
 
                 <!-- Analisis de ventas -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_sales_invoice_analysis.js" />
+
+                <!-- Análisis de contrato -->
+                <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_contratocliente.js"/>
+
                 <!-- Ranking ventas -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/ranking_sales_orders_product_cy.js"/>
                 <!-- <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_refund_invoice_customer.js"/> -->

+ 7 - 0
views/actions.xml

@@ -77,6 +77,12 @@
             <field name="tag">eiru_reporting.sale_action_report</field>
         </record>
 
+		<!-- Analisis de Contratos de Clientes -->
+		<record id="contratocliente_report_action" model="ir.actions.client">
+			<field name="name">Analisis de Contratos de Clientes</field>
+			<field name="tag">eiru_reporting.contratocliente_action_report</field>
+		</record>
+
 		<!-- Ranking de clientes con mas compras -->
 		<record id="sale_customer_ranking_report_action" model="ir.actions.client">
 			<field name="name">Ranking de clientes</field>
@@ -103,6 +109,7 @@
             <field name="tag">eiru_reporting.point_of_sale_detail_action_report</field>
         </record>
 
+
 		<!-- Historico de ventas y pos -->
 		<record id="sale_pos_order_report_action" model="ir.actions.client">
 			<field name="name">Historico de Ventas</field>

+ 7 - 4
views/menus.xml

@@ -33,11 +33,14 @@
 	        <!-- Analisis de facturas de ventas -->
 	        <menuitem id="sale_report_menu_submenu" parent="sale_report_parent_menu" name="Analisis Ventas" action="sale_report_action" sequence="1"/>
 
+            <!-- Analisis de contratos de clientes -->
+            <menuitem id="contratocliente_report_menu_submenu" parent="sale_report_parent_menu" name="Analisis Contratos de Clientes" action="contratocliente_report_action" sequence="2"/>
+
             <!-- Ranking de clientes con mas compras -->
-            <menuitem id="saleranking_report_menu_submenu" parent="sale_report_parent_menu" name="Ranking de clientes con mas compras" action="sale_customer_ranking_report_action" sequence="2"/>
+            <menuitem id="saleranking_report_menu_submenu" parent="sale_report_parent_menu" name="Ranking de clientes con mas compras" action="sale_customer_ranking_report_action" sequence="3"/>
 
             <!-- Ranking de productos mas vendidos -->
-            <menuitem id="productranking_report_menu_submenu" parent="sale_report_parent_menu" name="Ranking de productos mas vendidos" action="productranking_report_action" sequence="3"/>
+            <menuitem id="productranking_report_menu_submenu" parent="sale_report_parent_menu" name="Ranking de productos mas vendidos" action="productranking_report_action" sequence="4"/>
 
 	    <!-- POS Submenu -->
         <menuitem id="point_of_sale_report_parent_menu" name="TPV" parent="eiru_report_main_menu" sequence="3"/>
@@ -86,10 +89,10 @@
         	<menuitem id="voucher_report_menu_submenu" parent="account_report_parent_menu" name="Historico de Pagos" action="voucher_report_action" sequence="5"/>
 
             <!-- Listado de cuentas a cobrar-->
-            <menuitem id="account_pending_menu_submenu" parent="account_report_parent_menu" name="Cuentas a Cobrar" action="account_pending_report_action" sequence="7"/>
+            <menuitem id="account_pending_menu_submenu" parent="account_report_parent_menu" name="Cuentas a Pagar" action="account_pending_report_action" sequence="7"/>
 
         	<!-- Listado de cuentas a pagar-->
-            <menuitem id="account_report_menu_submenu" parent="account_report_parent_menu" name="Cuentas a Pagar" action="account_report_action" sequence="6"/>
+            <menuitem id="account_report_menu_submenu" parent="account_report_parent_menu" name="Cuentas a Cobrar" action="account_report_action" sequence="6"/>
 
         <!-- Sexto Submenu -->