Browse Source

FIX ADD Agregado ventas normal/pos juntos y stock por ubicacion

Sebas 6 years ago
parent
commit
e156d5b95e

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

@@ -68,11 +68,16 @@ function configuration_reporting (instance, widget) {
                 description: 'Permite visualizar de forma global los ingresos obtenidos por la empresa.',
                 action: 'ReportPosOrders'
             },
-            // {
-            //     title: 'Analisis de ventas generales',
-            //     description: 'Permite visualizar de forma global los ingresos obtenidos por la empresa. Tanto ventas normales y punto de ventas',
-            //     action: 'ReportVentasPosOrders'
-            // },
+            {
+                title: 'Histórico de Ventas generales',
+                description: 'Permite realizar un listado de las cabeceras de facturas de venta.',
+                action: 'ReportSalePosCab'
+            },
+            {
+                title: 'Analisis de ventas generales',
+                description: 'Permite visualizar de forma global los ingresos obtenidos por la empresa. Tanto ventas normales y punto de ventas',
+                action: 'ReportVentasPosOrders'
+            },
             {
                 title: 'Ranking Productos más Vendidos',
                 description: 'Permite realizar un analisis de los Productos más Vendidos.',
@@ -103,6 +108,11 @@ function configuration_reporting (instance, widget) {
                 description: 'Permite realizar un analisis de los productos disponibles en el stock.',
                 action: 'ReportStock'
             },
+            {
+                title: 'Análisis de Stock por Ubicación',
+                description: 'Permite realizar un analisis de los productos disponibles en el stock por Ubicación.',
+                action: 'ReportStockLocation'
+            },
             {
                 title: 'Análisis de Movimientos de Stock',
                 description: 'Permite realizar un analisis de los productos disponibles en el stock.',

+ 10 - 3
static/src/js/main.js

@@ -19,6 +19,7 @@ openerp.eiru_reporting = function (instance) {
         report_sales_invoice_analysis(reporting);
         report_purchases_invoice_analysis(reporting);
         report_stock(reporting);
+        report_stock_location(reporting);
         report_stock_move(reporting);
         report_crm(reporting);
         report_mensajecrm(reporting);
@@ -42,8 +43,9 @@ openerp.eiru_reporting = function (instance) {
         ranking_purchases_orders_product_cy(reporting);
         report_bank_movements(reporting);
         // report_bank_gral(reporting);
-        // report_ventas_pos_orders(reporting);
+        report_ventas_pos_orders(reporting);
         report_sale_cab(reporting);
+        report_sale_pos_cab(reporting);
         report_pos_orders(reporting);
 
     } catch (e) {
@@ -94,8 +96,11 @@ openerp.eiru_reporting = function (instance) {
     // Analisis de ventas
     instance.web.client_actions.add('eiru_reporting.point_of_sale_detail_action_report', 'instance.eiru_reporting.ReportPosOrdersWidget');
 
-    // Historico de pos y ventas
-    // instance.web.client_actions.add('eiru_reporting.point_venta_action_report', 'instance.eiru_reporting.ReportVentasPosOrdersWidget');
+    // Historico de ventas y pos
+    instance.web.client_actions.add('eiru_reporting.sale_pos_order_action_report', 'instance.eiru_reporting.ReportSalePosCabWidget');
+
+    // Analisis de pos y ventas
+     instance.web.client_actions.add('eiru_reporting.point_venta_action_report', 'instance.eiru_reporting.ReportVentasPosOrdersWidget');
 
     // Ranking de productos
     instance.web.client_actions.add('eiru_reporting.point_of_sale_ranking_action_report', 'instance.eiru_reporting.RankingPosOrdersProductcyWidget');
@@ -143,6 +148,8 @@ openerp.eiru_reporting = function (instance) {
     // ******************************************* Stock *************************************************************************
     // Analisis de stock
     instance.web.client_actions.add('eiru_reporting.stock_action_report', 'instance.eiru_reporting.ReportStockWidget');
+    // Analisis de stock por location
+    instance.web.client_actions.add('eiru_reporting.stock_location_action_report', 'instance.eiru_reporting.ReportStockLocationWidget');
     // Analisis de movimientos de stock
     instance.web.client_actions.add('eiru_reporting.stock_move_action_report', 'instance.eiru_reporting.ReportStockMoveWidget');
 

+ 8 - 32
static/src/js/reports/report_invoice_balance.js

@@ -283,7 +283,10 @@ function report_invoice_balance (reporting){
 
         factSearch: function(){
             var self = this;
-            var hoy = moment().format('YYYY-MM-DD');
+            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('-');
@@ -292,49 +295,22 @@ function report_invoice_balance (reporting){
 
             if ($('#A').is(":checked")){
                 content = _.filter(content, function (inv){
-                    return inv.date == hoy;
+                    return moment(inv.date).format('YYYY-MM-DD') == today;
                 });
             }
             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];
+                    return moment(inv.date).format('YYYY-MM-DD') == yesterday;
                 });
             }
             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];
+                    return moment(inv.date).format('YYYY-MM') == month;
                 });
             }
             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];
+                    return moment(inv.date).format('YYYY-MM') == last_month;
                 });
             }
             if ($('#Z').is(":checked")){

+ 3 - 2
static/src/js/reports/report_pos_orders.js

@@ -7,6 +7,7 @@ function report_pos_orders(reporting){
         template: 'ReportPosOrders',
         rowsData :[],
         PosOrderLine: [],
+        modules:[],
         content:[],
 
         events:{
@@ -162,7 +163,7 @@ function report_pos_orders(reporting){
                 self.modules = modules;
                 return modules;
             }).then(function(modules){
-                return self.fetchPosOrder()
+                return self.fetchPosOrder();
             }).then(function(PosOrder) {
                 self.PosOrder = PosOrder;
                 return PosOrder;
@@ -279,7 +280,7 @@ function report_pos_orders(reporting){
             var domain = [['order_id', 'in', ids]];
             var PosOrderLine = new model.web.Model('pos.order.line');
             PosOrderLine.query().filter(domain).all().then(function (results) {
-                defer.resolve(results)
+                defer.resolve(results);
             });
             return defer;
         },

+ 0 - 1
static/src/js/reports/report_sale_cab.js

@@ -366,7 +366,6 @@ function report_sale_cab(reporting){
             var store = this.$el.find('#current-store').val();
             var content = self.content;
 
-
             if ($('#A').is(":checked")){
                 content = _.filter(content, function (inv){
                     return moment(inv.date).format('YYYY-MM-DD') == today;

+ 662 - 0
static/src/js/reports/report_sale_pos_cab.js

@@ -0,0 +1,662 @@
+function report_sale_pos_cab(reporting){
+    "use strict";
+
+    var instance = openerp;
+
+    reporting.ReportSalePosCabWidget = reporting.Base.extend({
+        template: 'ReportSalePosCab',
+        content: [],
+        rowsData :[],
+        invoices: [],
+        PosOrder :[],
+        ResUser :[],
+        AccountJournal:[],
+        accountJournal:[],
+        accountJournalPos:[],
+        modules:[],
+        events:{
+            'click #toolbar > button' : 'clickOnAction',
+            'click #X' : 'factSearch',
+            'click #A' : 'factSearch',
+            'click #B' : 'factSearch',
+            'click #C' : 'factSearch',
+            'click #D' : 'factSearch',
+            'click #Z' : 'factSearch',
+            'change #from' : 'factSearch',
+            'change #to' : 'factSearch',
+            'change #user' : 'factSearch',
+            'change #current-journal' : 'factSearch',
+            'change #current-store' : 'factSearch',
+            'click-row.bs.table #table ' : 'ckickAnalysisDetail',
+        },
+        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
+        },
+
+        ckickAnalysisDetail: function(e, row, $element, field){
+            if (field == 'number'){
+                this.do_action({
+                    name:"Factura de cliente",
+                    type: 'ir.actions.act_window',
+                    res_model: "account.invoice",
+                    views: [[false,'form']],
+                    target: 'new',
+                    domain: [['type', '=', 'out_invoice'],['id','=', row.id]],
+                    context: {},
+                    flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
+                    res_id: row.id,
+                });
+            }
+            if (field == 'ref'){
+                this.do_action({
+                    name:"Pos",
+                    type: 'ir.actions.act_window',
+                    res_model: "pos.order",
+                    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.fetchPosOrder();
+            }).then(function(PosOrder) {
+                self.PosOrder = PosOrder;
+                return self.fetchStatementLine(PosOrder);
+            }).then(function(StatementLine){
+                self.StatementLine=StatementLine;
+                return self.fecthAccountJournalPos();
+            }).then(function(AccountJournalPos){
+               self.AccountJournalPos = AccountJournalPos;
+               self.$el.find('#current-journal').append('<option value="9999999">Todas los metodos de pago.</option>');
+               _.each(AccountJournalPos,function(item){
+                   if(item.type == 'cash' || item.type == 'bank'){
+                       self.$el.find('#current-journal').append('<option value="' + item.id + '">' + item.name + '</option>');
+                   }
+               });
+                return self.fecthAccountJournal();
+            }).then(function(AccountJournal){
+                self.AccountJournal = AccountJournal;
+               return self.fetchInvoiceV2();
+            }).then(function (invoices){
+               self.invoices = invoices;
+                return self.fetchResPartner();
+            }).then(function(ResPartner){
+                self.ResPartner = ResPartner;
+                return self.fecthResStore();
+            }).then(function(ResStore){
+                self.ResStore = ResStore;
+                self.$el.find('#current-store').append('<option value="9999999">Todas las SUC.</option>');
+                _.each(ResStore,function(item){
+                self.$el.find('#current-store').append('<option value="' + item.id + '">' + item.name + '</option>');
+            });
+                return self.fecthResUser();
+            }).then(function (ResUser) {
+                self.ResUser = ResUser;
+                self.search();
+                self.searchUser();
+                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;
+            }
+        },
+
+        fecthResStore: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field=['id', 'name'];
+            var ResStore = new instance.web.Model('res.store');
+            ResStore.query(field).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fecthAccountJournal: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field = ['id', 'name','store_ids'];
+            var domain = [['active','=',true],['type','in',['sale','purchase']]];
+            var AccountJournal = new instance.web.Model('account.journal');
+            AccountJournal.query(field).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        // Invoice (FACTURAS)
+        fetchInvoiceV2: function () {
+            var self = this;
+            var filter ="[['state', 'in',['open','paid']],['type', '=', 'out_invoice']";
+            var journal_ids = _.flatten(_.map(self.AccountJournal, function (item) {
+                return item.id;
+            }));
+            if (journal_ids){
+                filter=filter.concat(",['journal_id', 'in',["+journal_ids+"]]");
+            }
+            filter=filter.concat("]");
+            var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'user_id','date_invoice','amount_total','partner_id'];
+            var defer = $.Deferred();
+            var Invoice = new instance.web.Model('account.invoice');
+            Invoice.query(field).filter(filter).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        getAccountJournal: function (id) {
+            var self = this;
+            return _.filter(self.AccountJournal,function (item) {
+                return item.id === id;
+            });
+        },
+
+        fecthAccountJournalPos: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field = ['id', 'name','store_ids','type'];
+            var domain = [['active','=',true],['type','in',['sale','bank','cash']]];
+            var AccountJournalPos = new instance.web.Model('account.journal');
+            AccountJournalPos.query(field).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchPosOrder: function () {
+            var self = this;
+            var filter =[['state', 'in',['done','paid','invoiced']]];
+            var field =['id', 'name', 'session_id', 'state', 'table_id', 'statement_ids','date_order','partner_id','amount_total','user_id','amount_tax','sale_journal'];
+            var defer = $.Deferred();
+            var modules = self.checkModel('point_of_sale');
+
+            if (modules.length <= 0){
+                self.showMensaje('point_of_sale');
+                return defer;
+            }
+            var PosOrder = new instance.web.Model('pos.order');
+            PosOrder.query(field).filter(filter).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchStatementLine: function(PosOrder) {
+            var self = this;
+            var defer = $.Deferred();
+
+            var fields = ['id', 'name', 'amount', 'journal_id', 'pos_statement_id'];
+            var domain = [['amount','>', 0]];
+            var StatementLine = new instance.web.Model('account.bank.statement.line');
+            StatementLine.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        getStatementLine: function(id){
+            var self = this;
+            return _.filter(self.StatementLine, function(item){
+                return item.pos_statement_id[0] === id;
+            });
+        },
+
+        getAccountJournalPos: function (id) {
+            var self = this;
+            return _.filter(self.AccountJournalPos,function (item) {
+                return item.id === id;
+            });
+        },
+
+        fetchResPartner: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var ResPartner = new instance.web.Model('res.partner');
+            ResPartner.query(['id', 'name', 'ruc']).filter([['active', '=', true], ['customer', '=', true]]).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        valorNull:function(dato){
+            var valor ="";
+            if (dato){
+                valor=dato;
+            }
+            return valor;
+        },
+
+        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();
+                }
+            });
+        },
+
+        // Consultar Usuario
+        fecthResUser: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var user_ids = _.map(self.invoices,function(map){
+                return map.user_id[0];
+            });
+            var fields = ['id', 'name'];
+            var domain = [['id', 'in', user_ids]];
+            var ResUsers = new instance.web.Model('res.users');
+            ResUsers.query(fields).filter(domain).all().then(function(results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        searchUser: function () {
+            var self = this;
+            var results = self.ResUser;
+            results = _.map(results, function (item) {
+                return {
+                        label: item.id + '-'+ item.name,
+                        value: item.id + '-'+ item.name
+                }
+            });
+            self.$('#user').autocomplete({
+                source: results,
+                minLength:0,
+                searchUser: function(event, ui) {
+                    if (!(self.$('#user').val())){
+                        self.factSearch();
+                    }
+                },
+                close: function( event, ui ) {
+                        self.factSearch();
+                },
+                select: function(event, ui) {
+                    self.factSearch();
+                }
+            });
+        },
+
+        getAccountJournal: function (id) {
+            var self = this;
+            return _.filter(self.AccountJournal,function (item) {
+                return item.id === id;
+            });
+        },
+
+        getSaleOrder:function(partner_id) {
+            var self = this;
+            return _.flatten(_.filter(self.invoices,function (inv) {
+                return inv.user_id[0] === partner_id;
+            }));
+        },
+
+        BuildTable: function(){
+            var self = this;
+            var invoices = self.invoices;
+            var PosOrder = self.PosOrder;
+            var order = [];
+            var data = [];
+            var store = [];
+            var amount_total_total = 0;
+            _.each(invoices, function(item){
+                order = self.getSaleOrder(item.user_id[0]);
+                store= self.getAccountJournal(item.journal_id[0]);
+                if(order.length > 0 & store.length > 0){
+                    data.push({
+                        id : item.id,
+                        number: item.number,
+                        ref: "",
+                        partner: item.partner_id[1],
+                        date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"),
+                        amount_total: accounting.formatNumber(item.amount_total,0,".",","),
+                        date: item.date_invoice,
+                        partner_id : item.partner_id[0],
+                        amount : item.amount_total,
+                        journal_id: item.journal_id[0],
+                        journal_name: item.journal_id[1],
+                        user_id : item.user_id[0],
+                        user: item.user_id[1],
+                        store_id : store[0].store_ids[0]
+                    });
+                }
+            });
+
+            _.each(PosOrder, function(item){
+                order = self.getStatementLine(item.id);
+                store = self.getAccountJournalPos(item.sale_journal[0]);
+                if(order.length > 0 & store.length > 0){
+                    data.push({
+                        id : item.id,
+                        number: "",
+                        ref: item.name,
+                        origin: item.session_id[1],
+                        partner: item.partner_id[1],
+                        date_invoice: moment(item.date_order).format("DD/MM/YYYY"),
+                        amount_total: accounting.formatNumber(item.amount_total,0,".",","),
+                        date: item.date_order,
+                        partner_id : item.partner_id[0],
+                        amount : item.amount_total,
+                        journal_id: order[0].journal_id[0],
+                        journal_name: order[0].journal_id[1],
+                        user_id : item.user_id[0],
+                        user: item.user_id[1],
+                        store_id : store[0].store_ids[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 user= this.$el.find('#user').val();
+            var desde =this.$el.find('#from').val();
+            var hasta =this.$el.find('#to').val();
+            var partner= this.$el.find('#partner').val().split('-');
+            var store = this.$el.find('#current-store').val();
+            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 (partner != ""){
+                content = _.filter(content, function(inv){
+                    return inv.partner_id == partner[0];
+                });
+            }
+            if (user != ""){
+                content = _.filter(content,function(inv){
+                    return inv.user_id == user[0];
+                });
+            }
+            if (store != 9999999){
+                content =_.filter(content, function (inv){
+                    return inv.store_id == store;
+                });
+            }
+
+            var amount_total_total = _.reduce(_.map(content,function(map){
+                return(map.amount);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
+            content.push({
+                number: "Total",
+                amount_total: accounting.formatNumber((amount_total_total),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 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 Cabezera
+                _.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: {
+                    number : {columnWidth: '8px'},
+                    ref : {columnWidth: '8px'},
+                    partner : {columnWidth: '8px'},
+                    date_invoice : {columnWidth: '8px'},
+                    amount_total : {halign:'right',columnWidth: '8px'},
+                    namejournal : {columnWidth: '6px'},
+                    user : {halign:'left',columnWidth: '8px'},
+                },
+                margin: { top: 16, horizontal: 7},
+                addPageContent: function (data) {
+                    pdfDoc.setFontSize(12);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Histórico de Venta ', 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 Venta.pdf')
+        },
+    });
+}

+ 9 - 28
static/src/js/reports/report_sales_invoice_analysis.js

@@ -349,7 +349,10 @@ function report_sales_invoice_analysis (reporting){
 
         fectSearch: function(){
             var self = this;
-            var hoy = moment().format('YYYY-MM-DD');
+            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 partner = this.$el.find('#partner').val().split('-');
             var product = this.$el.find('#product').val().split('-');
             var desde =this.$el.find('#from').val();
@@ -359,47 +362,25 @@ function report_sales_invoice_analysis (reporting){
 
             if ($('#A').is(":checked")){
                 self.rowsData = _.filter(self.rowsData, function (inv){
-                    return inv.date_invoice == hoy;
+                    return moment(inv.date_invoice).format('YYYY-MM-DD') == today;
                 });
             }
             if ($('#B').is(":checked")){
-                var date = hoy.split('-');
-                var ayer = date[2] - 1;
-                date.splice(2,0);
-                date[2] = '0'+ayer;
                 self.rowsData = _.filter(self.rowsData, function (inv){
-                    return inv.date_invoice == date[0]+'-'+date[1]+'-'+date[2];
+                    return moment(inv.date_invoice).format('YYYY-MM-DD') == yesterday;
                 });
             }
             if ($('#C').is(":checked")){
-                var date = hoy.split('-');
                 self.rowsData = _.filter(self.rowsData, function (inv){
-                    var mes = inv.date_invoice.split('-');
-                    return mes[0]+'-'+mes[1] == date[0]+'-'+date[1];
+                    return moment(inv.date_invoice).format('YYYY-MM') == month;
                 });
             }
             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;
-                    }
-                }
                 self.rowsData = _.filter(self.rowsData, function (inv){
-                    var mes = inv.date_invoice.split('-');
-                    return mes[0]+'-'+mes[1] == date[0]+'-'+date[1];
+                    return moment(inv.date_invoice).format('YYYY-MM') == last_month;
                 });
             }
+
             if ($('#Z').is(":checked")){
                 $('#datepicker').css('display','block');
                 if (desde.length > 0){

+ 128 - 67
static/src/js/reports/report_stock.js

@@ -57,12 +57,16 @@ function report_stock (reporting){
                 self.StockLocation=StockLocation;
                 return StockLocation;
             }).then(function(StockLocation){
+                self.$el.find('#current-location').append('<option value="9999999">Todas las Ubicación.</option>');
+                _.each(StockLocation,function(item){
+                    self.$el.find('#current-location').append('<option value="' + item.id + '">' + item.location_id[1]+" / "+item.name + '</option>');
+                });
                 return self.fecthStockQuant();
             }).then(function(StockQuant){
                 self.StockQuant = StockQuant;
-                return self.fecthProductProduct();
-            }).then(function(ProductProduct){
-                self.ProductProduct = ProductProduct;
+                return self.fecthProductProduct(StockQuant);
+            }).then(function(productProduct){
+                self.productProduct = productProduct;
                 return self.fecthProductCategory();
             }).then(function(ProductCategory){
                 self.ProductCategory = ProductCategory;
@@ -70,8 +74,8 @@ function report_stock (reporting){
                 _.each(ProductCategory, function (item) {
                     self.$el.find('#current-category').append('<option value="' + item.id + '">' + item.name + '</option>');
                 });
-                self.search();
-                return self.BuildTable(self.stockQuant, self.stockLocation);
+                self.searchProduct();
+                return self.BuildTable(self.StockQuant, self.StockLocation);
             });
         },
         fecthStockLocation : function(){
@@ -102,15 +106,15 @@ function report_stock (reporting){
             })
             return defer;
         },
-        fecthProductProduct: function(){
+        fecthProductProduct: function(quant){
             var self = this;
             var defer = $.Deferred();
-            var ids = _.flatten(_.map(self.StockQuant, function (item) {
+            var ids = _.flatten(_.map(quant, function (item) {
                 return item.product_id[0];
             }));
             var fields = ['id','name','name_template', 'standard_price','type','attribute_value_ids', 'lst_price','ean13','categ_id','attribute_str'];
-            var ProductProduct =  new instance.web.Model('product.product');
-            ProductProduct.query(fields).filter([['id', 'in', ids]]).all().then(function (results) {
+            var productProduct =  new instance.web.Model('product.product');
+            productProduct.query(fields).filter([['id', 'in', ids]]).all().then(function (results) {
               defer.resolve(results)
             });
             return defer;
@@ -125,13 +129,14 @@ function report_stock (reporting){
             });
             return defer;
         },
-        getProductProduct: function(ProductProduct, StockQuant){
+
+        getProdcutoProduct: function(productProduct, StockQuant){
             var self = this;
             var product_ids= _.flatten(_.map(StockQuant,function(map){
                 return map.product_id[0];
             }));
 
-            return _.filter(ProductProduct,function(prod){return _.contains(product_ids, prod.id)});
+            return _.filter(productProduct,function(prod){return _.contains(product_ids, prod.id)});
         },
         getStockQuant: function(product_id, quantObjs){
             var self = this;
@@ -143,53 +148,14 @@ function report_stock (reporting){
             }
             return quantProduct;
         },
-        BuildTable : function(stockQuant,stockLocation){
-            var self = this;
-            var data=[];
-            var itemLocation;
-            var itemProduct;
-            var itemQuant;
-            var ProductProduct;
-            var product;
-            var quantity = 0;
-            var total=0;
-            ProductProduct = self.getProductProduct(self.ProductProduct, self.StockQuant);
-            _.each(ProductProduct, function(item){
-                itemProduct = item;
-                itemQuant = self.getStockQuant( itemProduct.id, self.StockQuant);
-                if (itemQuant.length > 0){
-                    quantity = _.reduce(_.map(itemQuant,function(item){
-                        return item.qty;
-                    }),function(mamo, num){
-                        return mamo + num;
-                    },0);
-                    product = itemQuant.shift();
-                    total = parseInt(quantity * itemProduct.standard_price);
-                    data.push({
-                        id : product.product_id[0],
-                        product : product.product_id[1],
-                        ean13 : self.valorNull(itemProduct.ean13),
-                        category_name : itemProduct.categ_id[1],
-                        qty : accounting.formatNumber(quantity,2, ".", ","),
-                        standard_price : accounting.formatNumber(itemProduct.standard_price,0, ".", ","),
-                        lst_price : accounting.formatNumber(itemProduct.lst_price,0, ".", ","),
-                        valuation: accounting.formatNumber(total,0,".",","),
-                        category_id : itemProduct.categ_id[0],
-                        location_id : product.location_id[0],
-                        total : total
-                    });
-                }
-            })
-            self.content = data;
-            self.loadTable(data);
-        },
-        search: function () {
+
+        searchProduct: function () {
             var self = this;
-            var results = self.ProductProduct;
+            var results = self.productProduct;
             results = _.map(results, function (item) {
                 return {
-                        label: item.id + '- '+ ' [ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' ( ' +  self.valorNull(item.attribute_str) + ' ) ' ,
-                        value: item.id + '- '+ ' [ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' ( ' +  self.valorNull(item.attribute_str) + ' ) '
+                    label: item.id + '- '+ ' [ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' ( ' +  self.valorNull(item.attribute_str) + ' ) ' ,
+                    value: item.id + '- '+ ' [ ' + self.valorNull(item.default_code) + ' - ' + self.valorNull(item.ean13) + ' ] ' + item.name + ' ( ' +  self.valorNull(item.attribute_str) + ' ) '
                 }
             });
             self.$('#product').autocomplete({
@@ -208,35 +174,128 @@ function report_stock (reporting){
                 }
             });
         },
+
+        BuildTable : function(StockQuant,StockLocation){
+            var self = this;
+            var data=[];
+            var stock=[];
+            var itemLocation;
+            var itemProduct;
+            var itemQuant;
+            var ProductProduct;
+            var product;
+            var quantity = 0;
+            var total=0;
+            var cat = 0;
+            var quant;
+            for (var i = 0; i < StockLocation.length; i++) {
+                itemLocation = StockLocation[i];
+                ProductProduct = self.getProdcutoProduct(self.productProduct, self.StockQuant, itemLocation.id);
+                // console.log(ProductProduct);
+                for (var f = 0; f < ProductProduct.length; f++) {
+                    itemProduct = ProductProduct[f];
+                    //console.log(itemProduct);
+                    itemQuant = self.getQuantProduct(itemLocation.id, itemProduct.id, StockQuant);
+                    // console.log(itemQuant);
+                    // if (itemQuant.length = 0){
+                    //     itemQuant={};
+                    //     console.log(itemProduct);
+                    //     itemQuant.qty=0;
+                    //     product = itemQuant.shift();
+                    //     total = parseInt(quantity * itemProduct.standard_price);
+                    //     data.push({
+                    //         id : product.product_id[0],
+                    //         product : product.product_id[1],
+                    //         ean13 : self.valorNull(itemProduct.ean13),
+                    //         category_name : itemProduct.categ_id[1],
+                    //         qty : accounting.formatNumber(quantity,2, ".", ","),
+                    //         standard_price : accounting.formatNumber(itemProduct.standard_price,0, ".", ","),
+                    //         lst_price : accounting.formatNumber(itemProduct.lst_price,0, ".", ","),
+                    //         valuation: accounting.formatNumber(total,0,".",","),
+                    //         category_id : itemProduct.categ_id[0],
+                    //         location_id : product.location_id[0],
+                    //         location_name: product.location_id[1],
+                    //         total : total
+                    //     });
+                    // }
+                    if (itemQuant.length > 0){
+                        quantity = _.reduce(_.map(itemQuant,function(item){
+                            return item.qty;
+                        }),function(mamo, num){
+                            return mamo + num;
+                        },0);
+                        product = itemQuant.shift();
+                        total = parseInt(quantity * itemProduct.standard_price);
+                        data.push({
+                            id : product.product_id[0],
+                            product : product.product_id[1],
+                            ean13 : self.valorNull(itemProduct.ean13),
+                            category_name : itemProduct.categ_id[1],
+                            qty : accounting.formatNumber(quantity,2, ".", ","),
+                            standard_price : accounting.formatNumber(itemProduct.standard_price,0, ".", ","),
+                            lst_price : accounting.formatNumber(itemProduct.lst_price,0, ".", ","),
+                            valuation: accounting.formatNumber(total,0,".",","),
+                            category_id : itemProduct.categ_id[0],
+                            location_id : product.location_id[0],
+                            location_name: product.location_id[1],
+                            total : total
+                        });
+                    }
+                }
+            }
+
+            self.content = data;
+            self.loadTable(data);
+        },
+
+        // Obtener  Qaunt  por productos
+        getQuantProduct: function(location_id, product_id, quantObjs){
+            var self = this;
+            var quantProdcut = quantObjs;
+            if (location_id){
+                quantProdcut = _.filter(quantProdcut, function(item){
+                    return item.location_id[0] === location_id;
+                });
+            }
+            if (product_id){
+                quantProdcut = _.filter(quantProdcut, function(item){
+                    return item.product_id[0] === product_id;
+                });
+            }
+            return quantProdcut;
+        },
+
         factSearch: function(){
             var self = this;
             var category = this.$el.find('#current-category').val();
             var product= this.$el.find('#product').val().split('-');
+            var location =this.$el.find('#current-location').val();
+            // console.log(location);
+            // var locationObjs = self.StockLocation;
+            // var quantObjs = self.StockQuant;
             var content = self.content;
+            // console.log(content);
             if(category != 9999999){
                 content = _.filter(content,function(inv){
                     return inv.category_id == category;
                 });
             }
+            if (location != 9999999){
+                content=_.filter(content, function (inv){
+                    return inv.location_id == location;
+                });
+            }
+
             if (product != ""){
                 content = _.filter(content, function(inv){
                     return inv.id == product[0];
                 });
             }
-
-            var amount_total_total = _.reduce(_.map(content,function(map){
-                return(map.total);
-            }),function(memo, num){
-                return memo + num;
-            },0);
-
-            content.push({
-                product: "Total",
-                valuation: accounting.formatNumber((amount_total_total),0,".",","),
-            });
-
             self.loadTable(content)
+            // self.BuildTable(quantObjs,locationObjs)
         },
+
+
         loadTable:function(rowsTable){
             var self = this;
             self.rowsData = rowsTable;
@@ -302,6 +361,8 @@ function report_stock (reporting){
                                     standard_price : {halign:'right'},
                                     lst_price : {halign:'right'},
                                     valuation : {halign:'right'},
+                                    category_name :{columnWidth: '8px'},
+                                    location_name :{columnWidth: '8px'},
                                 },
                     margin: { top: 16, horizontal: 7},
                 addPageContent: function (data) {

+ 290 - 249
static/src/js/reports/report_ventas_pos_orders.js

@@ -6,7 +6,14 @@ function report_ventas_pos_orders(reporting){
     reporting.ReportVentasPosOrdersWidget = reporting.Base.extend({
         template: 'ReportVentasPosOrders',
         rowsData :[],
+        modules:[],
         PosOrderLine: [],
+        accountJournal:[],
+        productProduct:[],
+        productInvoice:[],
+        invoices: [],
+        invoiceLines: [],
+        PosOrder: [],
         content:[],
 
         events:{
@@ -17,12 +24,9 @@ function report_ventas_pos_orders(reporting){
             'click #C' : 'fectSearch',
             'click #D' : 'fectSearch',
             'click #Z' : 'fectSearch',
+            'change #current-store': 'fectSearch',
             'change #from' : 'fectSearch',
             'change #to': 'fectSearch',
-            'change #current-category' : 'fectSearch',
-            'change #current-floor': 'fectSearch',
-            'change #current-table': 'fectSearch',
-            'change #current-store': 'fectSearch',
             'click-row.bs.table #table' : 'clickAnalysisDetail',
         },
 
@@ -37,18 +41,79 @@ function report_ventas_pos_orders(reporting){
             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
+        },
+
         clickAnalysisDetail: function(e, row, $element, field){
+            if (field == 'ref'){
+                this.do_action({
+                    name:"Factura de cliente",
+                    type: 'ir.actions.act_window',
+                    res_model: "account.invoice",
+                    views: [[false,'form']],
+                    target: 'new',
+                    domain: [['type', '=', 'out_invoice'],['id','=', row.order_id]],
+                    context: {},
+                    flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
+                    res_id: row.order_id,
+                });
+            }
             if (field == 'order_name'){
                 this.do_action({
-                    name : "Pedido",
-                    type : 'ir.actions.act_window',
-                    res_model : "pos.order",
-                    views : [[false,'form']],
-                    target : 'new',
-                    domain : [['id','=', row.order_id]],
-                    context : {},
-                    flags : {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
-                    res_id : row.order_id,
+                    name:"Pos",
+                    type: 'ir.actions.act_window',
+                    res_model: "pos.order",
+                    views: [[false,'form']],
+                    target: 'new',
+                    domain: [['id','=', row.id]],
+                    context: {},
+                    flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
+                    res_id: row.id,
                 });
             }
             if (field == 'product_name'){
@@ -111,22 +176,40 @@ function report_ventas_pos_orders(reporting){
         // Consultar
         submitForm: function () {
             var self = this;
-            this.fetchPosOrder().then(function(PosOrder) {
+            self.fecthIrModuleModule().then(function(modules){
+                self.modules = modules;
+                return modules;
+            }).then(function(modules){
+                return self.fetchPosOrder();
+            }).then(function(PosOrder) {
                 self.PosOrder = PosOrder;
                 return PosOrder;
             }).then(function (PosOrder) {
-                return self.fetchPosOrderLine(PosOrder);
+                return self.fetchPosOrderLine();
             }).then(function (PosOrderLine) {
                 self.PosOrderLine = PosOrderLine;
-                return self.fetchProductProduct(PosOrderLine);
+                return self.fetchProductProduct();
             }).then(function (ProductProduct) {
                 self.ProductProduct = ProductProduct;
-                return self.fecthSalesOrder();
-            }).then(function (SalesOrder) {
-                self.SalesOrder = SalesOrder;
-                return self.fecthSalesOrderLine(SalesOrder);
-            }).then(function (SalesOrderLine) {
-                self.SalesOrderLine = SalesOrderLine;
+                return self.fecthResStore();
+            }).then(function(ResStore){
+                self.ResStore = ResStore;
+                self.$el.find('#current-store').append('<option value="9999999">Todas las SUC.</option>');
+                _.each(ResStore,function(item){
+                self.$el.find('#current-store').append('<option value="' + item.id + '">' + item.name + '</option>');
+            });
+                return self.fecthAccountJournal();
+            }).then(function(AccountJournal){
+                self.AccountJournal = AccountJournal;
+                return self.fetchInvoiceV2();
+            }).then(function (invoices){
+                self.invoices = invoices;
+                return self.fetchInvoiceLine(invoices);
+            }).then(function (invoiceLines) {
+                self.invoiceLines = invoiceLines;
+                return self.fecthProduct(invoiceLines);
+            }).then(function(ProductInvoice){
+                self.ProductInvoice = ProductInvoice;
                 return self.fetchResPartner();
             }).then(function (ResPartner){
                 self.ResPartner = ResPartner;
@@ -135,33 +218,105 @@ function report_ventas_pos_orders(reporting){
             });
         },
 
-        // fecthResStore: function(){
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var field=['id', 'name'];
-        //     var ResStore = new model.web.Model('res.store');
-        //     ResStore.query(field).all().then(function(results){
-        //         defer.resolve(results);
-        //     });
-        //     return defer;
-        // },
-
-        // fecthAccountJournal: function(){
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var field = ['id', 'name','store_ids'];
-        //     var domain = [['active','=',true],['type','in',['sale','purchase']]];
-        //     var AccountJournal = new model.web.Model('account.journal');
-        //     AccountJournal.query(field).filter(domain).all().then(function(results){
-        //         defer.resolve(results);
-        //     });
-        //     return defer;
-        // },
+        // Modelos instalados
+        fecthIrModuleModule: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['name','id'];
+            var domain=[['state','=','installed']];
+            var irModule = new model.web.Model('ir.module.module');
+
+            irModule.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fecthAccountJournal: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field = ['id', 'name','store_ids'];
+            var domain = [['active','=',true],['type','in',['sale','purchase']]];
+            var AccountJournal = new model.web.Model('account.journal');
+            AccountJournal.query(field).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        // Invoice (FACTURAS)
+        fetchInvoiceV2: function () {
+            var self = this;
+            var filter ="[['state', 'in',['open','paid']],['type', '=', 'out_invoice']";
+            var journal_ids = _.flatten(_.map(self.AccountJournal, function (item) {
+                return item.id;
+            }));
+            if (journal_ids){
+                filter=filter.concat(",['journal_id', 'in',["+journal_ids+"]]");
+            }
+            filter=filter.concat("]");
+            var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'invoice_line','date_invoice','partner_id'];
+            var defer = $.Deferred();
+            var Invoice = new model.web.Model('account.invoice');
+            Invoice.query(field).filter(filter).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        // Invoice line (Linea de Factura)
+        fetchInvoiceLine: function (invoices) {
+            var self = this;
+            var defer = $.Deferred();
+            var linesIds = _.flatten(_.map(self.invoices, function (item) {
+                return item.invoice_line;
+            }));
+            var InvoiceLine = new model.web.Model('account.invoice.line');
+            InvoiceLine.query(['id', 'quantity', 'price_unit', 'discount', 'name', 'product_id', 'origin','invoice_id']).filter([['id', 'in', linesIds]]).all().then(function (results) {
+                defer.resolve(results)
+            });
+            return defer;
+        },
+
+        // clientes
+        fetchResPartner: function () {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','ruc'];
+            var domain = [['active', '=', true],['customer', '=', true]];
+            var ResPartner = new model.web.Model('res.partner');
+            ResPartner.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        // Product Product
+        fecthProduct: function(invoiceLines){
+            var self = this;
+            var defer = $.Deferred();
+            var porductIDS = _.flatten(_.map(self.invoiceLines, function (item) {
+                return item.product_id[0];
+            }));
+            var ProductInvoice =  new model.web.Model('product.product');
+            var fields = ['id','name', 'default_code', 'name_template','ean13', 'standard_price','type','attribute_str'];
+            ProductInvoice.query(fields).filter([['id', 'in', porductIDS]]).all().then(function (results) {
+                defer.resolve(results)
+            });
+            return defer;
+        },
 
         // Ventas (Point Of Sale)
         fetchPosOrder: function () {
             var self = this;
             var defer = $.Deferred();
+            var modules = self.checkModel('point_of_sale');
+
+            if (modules.length <= 0){
+                self.showMensaje('point_of_sale');
+                return defer;
+            }
+
             var fields = ['id','name','date_order','lines','table_id','sale_journal'];
             var domain = [['state', 'not in', ['draft','cancel']]];
             var PosOrder = new model.web.Model('pos.order');
@@ -182,19 +337,6 @@ function report_ventas_pos_orders(reporting){
             var domain = [['order_id', 'in', ids]];
             var PosOrderLine = new model.web.Model('pos.order.line');
             PosOrderLine.query().filter(domain).all().then(function (results) {
-                defer.resolve(results)
-            });
-            return defer;
-        },
-
-        // clientes
-        fetchResPartner: function () {
-            var self = this;
-            var defer = $.Deferred();
-            var fields = ['id','name','ruc'];
-            var domain = [['active', '=', true],['customer', '=', true]];
-            var ResPartner = new model.web.Model('res.partner');
-            ResPartner.query(fields).filter(domain).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -216,41 +358,6 @@ function report_ventas_pos_orders(reporting){
             return defer;
         },
 
-        // fecthPosCategory: function(){
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var fields = ['id','name'];
-        //     var PosCategory =  new model.web.Model('pos.category');
-        //     PosCategory.query(fields).filter().all().then(function (results) {
-        //         defer.resolve(results)
-        //     });
-        //     return defer;
-        // },
-
-        // Mesa o delivery
-        // fetchPosTable: function(){
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var fields = ['id','name', 'floor_id'];
-        //     var ProductProduct =  new model.web.Model('pos.table');
-        //     ProductProduct.query(fields).filter().all().then(function (results) {
-        //         defer.resolve(results);
-        //     });
-        //     return defer;
-        // },
-
-        // Salon o Delivery
-        // fetchPosFloor: function(){
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var fields = ['id','name', 'table_ids'];
-        //     var ProductProduct =  new model.web.Model('pos.floor');
-        //     ProductProduct.query(fields).filter().all().then(function (results) {
-        //         defer.resolve(results);
-        //     });
-        //     return defer;
-        // },
-
         getPosOrder: function(id){
             var self = this;
             return _.filter(self.PosOrder,function (item) {
@@ -258,81 +365,54 @@ function report_ventas_pos_orders(reporting){
             });
         },
 
-        getSaleOrder: function(id){
+        // Obtener las lineas de las Facturas
+        getProductProduct: function(id){
             var self = this;
-            return _.filter(self.SaleOrder,function (item) {
-                return item.id == id;
+
+            return _.filter(self.ProductProduct, function(item){
+                return item.id === id;
             });
         },
 
-        // getPosTable: function(id){
-        //     var self = this;
-        //     return _.filter(self.PosTable,function (item) {
-        //         return item.id == id;
-        //     });
-        // },
-
         // Obtener las lineas de las Facturas
-        getProductProduct: function(id){
+        getProductInvoice: function(id){
             var self = this;
-            //return _.find(self.ProductProduct, function(item){
-            //    return item.id == id;
-            //});
-            return _.filter(self.ProductProduct, function(item){
+            return _.filter(self.ProductInvoice, function(item){
                 return item.id === id;
             });
         },
 
-        // getPosCategory: function(id){
-        //     var self = this;
-        //     return _.filter(self.PosCategory, function(item){
-        //         return item.id == id;
-        //     });
-        // },
-
-        // getAccountJournal: function (id) {
-        //     var self = this;
-        //     return _.filter(self.AccountJournal,function (item) {
-        //         return item.id === id;
-        //     });
-        // },
+        getAccountJournal: function (id) {
+            var self = this;
+            return _.filter(self.AccountJournal,function (item) {
+                return item.id === id;
+            });
+        },
 
         // Obtener Pedido
-        fecthSalesOrder: function() {
+        fecthResStore: function(){
             var self = this;
             var defer = $.Deferred();
-            var modules = self.checkModel('sale');
-
-            if (modules.length <= 0){
-                self.showMensaje('sale');
-                return defer;
-            }
-
-            var fields = ['id', 'order_line', 'date_order'];
-            // var domain = [['date_order', '>=', desde], ['date_order', '<', hasta], ['state', 'in', ['paid','done','invoiced']]];
-            var domain = [ ['state', 'in', ['done', 'progress']]];
-            var SalesOrder = new instance.web.Model('sale.order');
-            SalesOrder.query(fields).filter(domain).all().then(function (results) {
+            var field=['id', 'name'];
+            var ResStore = new model.web.Model('res.store');
+            ResStore.query(field).all().then(function(results){
                 defer.resolve(results);
             });
-
             return defer;
         },
-        // Obtener linea de la factura
-        fecthSalesOrderLine: function(SalesOrder) {
-            var self = this;
-            var defer = $.Deferred();
-            var order_line = _.flatten(_.map(SalesOrder, function (item) {
-                return item.order_line;
-            }));
-            var fields = ['id', 'product_id', 'create_date', 'product_uom_qty', 'price_unit'];
-            var domain = [['id','in', order_line]];
-            var SalesOrderLine = new instance.web.Model('sale.order.line');
-            SalesOrderLine.query(fields).filter(domain).all().then(function (results) {
-                defer.resolve(results);
+
+        // Obtener la Detalles de la Factura
+        getInvoice: function (id_line){
+            return _.find(this.invoices, function (inv) {
+                return _.contains(inv.invoice_line, id_line);
             });
+        },
 
-            return defer;
+        getAccountJournalVentas: function (id) {
+            var self = this;
+            return _.filter(self.AccountJournal,function (item) {
+                return item.id === id;
+            });
         },
 
         BuildTable: function(){
@@ -343,20 +423,20 @@ function report_ventas_pos_orders(reporting){
             var itemsale;
             var producto = [];
             var saleproducto = [];
-            var category;
             var item;
-            var category_name;
-            var category_id;
-            var store;
 
             for (var i = 0; i < this.PosOrderLine.length; i++) {
                 item = this.PosOrderLine[i];
                 producto = self.getProductProduct(item.product_id[0]);
                 order = self.getPosOrder(item.order_id[0]).shift();
-                if(producto.length > 0){
+
+               var store = self.getAccountJournal(order.sale_journal[0]);
+
+                if(store.length > 0 && producto.length > 0){
                     data.push({
                         id : item.id,
                         order_id : item.order_id[0],
+                        ref: "",
                         order_name : item.order_id[1],
                         date : order.date_order,
                         date_order : moment(order.date_order).format("DD/MM/YYYY"),
@@ -372,56 +452,53 @@ function report_ventas_pos_orders(reporting){
                         price_tot_tot : ((item.qty * item.price_unit)),
                         standar_tot_tot : ((item.qty * producto[0].standard_price)),
                         utility_tot : (((item.qty * item.price_unit) - (item.qty * producto[0].standard_price))),
+                        store_id : store[0].store_ids[0],
                     });
                 }
             }
 
-            // for (var k = 0; k < this.SaleOrderLine.length; k++) {
-            //     itemsale = this.SaleOrderLine[k];
-            //     console.log(itemsale);
-            //     saleproducto = self.getProductProduct(itemsale.product_id[0]);
-            //     sale = self.getSaleOrder(itemsale.order_id[0]).shift();
-                // store = self.getAccountJournal(order.sale_journal[0]);
-                // category = self.getPosCategory(item.product_id[0]);
-                // if(category.length > 0){
-                //     category_name = category[0].name;
-                //     category_id = category[0].id;
-                // }else {
-                //     category_name = '';
-                //     category_id = '';
-                // }
-                // var place_id;
-                // var place_name;
-                // var floor;
-                // if(order.table_id){
-                //     floor = self.getPosTable(order.table_id[0]).shift();
-                //     floor = floor.floor_id[0];
-                //     place_id = order.table_id[0];
-                //     place_name = order.table_id[1];
-                // }
-            // }
-                // if(saleproducto.length > 0){
-                //     data.push({
-                //         id : itemsale.id,
-                //         order_id : itemsale.order_id[0],
-                //         order_name : itemsale.order_id[1],
-                //         date : sale.create_date,
-                //         date_order : moment(sale.create_date).format("DD/MM/YYYY"),
-                //         product_id : itemsale.product_id[0],
-                //         product_name : itemsale.product_id[1],
-                //         qty : accounting.formatNumber(itemsale.product_uom_qty,0,".",","),
-                //         price_unit : accounting.formatNumber(itemsale.price_unit,0,".",","),
-                //         standard_price : accounting.formatNumber((saleproducto[0].standard_price),0, ".", ","),
-                //         price_tot : accounting.formatNumber((itemsale.product_uom_qty * itemsale.price_unit),0, ".", ","),
-                //         standar_tot : accounting.formatNumber((itemsale.product_uom_qty * saleproducto[0].standard_price),0, ".", ","),
-                //         utility : accounting.formatNumber(((itemsale.product_uom_qty * itemsale.price_unit) - (itemsale.product_uom_qty * saleproducto[0].standard_price)),0, ".", ","),
-                //         qty_total : itemsale.product_uom_qty,
-                //         price_tot_tot : ((itemsale.product_uom_qty * itemsale.price_unit)),
-                //         standar_tot_tot : ((itemsale.product_uom_qty * saleproducto[0].standard_price)),
-                //         utility_tot : (((itemsale.product_uom_qty * itemsale.price_unit) - (itemsale.product_uom_qty * saleproducto[0].standard_price))),
-                //     });
-                // }
-            // }
+            for (var k = 0; k < this.invoiceLines.length; k++) {
+                itemsale = this.invoiceLines[k];
+
+                sale = this.getInvoice(itemsale.id);
+
+                saleproducto = this.getProductInvoice(itemsale.product_id[0]);
+
+
+                 if (!saleproducto){
+                     saleproducto={};
+                     saleproducto.standard_price=0;
+                 }
+
+                var storeVenta = self.getAccountJournalVentas(sale.journal_id[0]);
+                if (!storeVenta){
+                    storeVenta={};
+                    storeVenta.standard_price=0;
+                }
+                if(storeVenta.length > 0 && saleproducto.length > 0){
+                    data.push({
+                        id : itemsale.id,
+                        order_id : itemsale.invoice_id[0],
+                        ref: itemsale.invoice_id[1],
+                        order_name : "",
+                        date : sale.create_date,
+                        date_order : moment(sale.create_date).format("DD/MM/YYYY"),
+                        product_id : itemsale.product_id[0],
+                        product_name : itemsale.product_id[1],
+                        qty : accounting.formatNumber(itemsale.quantity,0,".",","),
+                        price_unit : accounting.formatNumber(itemsale.price_unit,0,".",","),
+                        standard_price : accounting.formatNumber((saleproducto[0].standard_price),0, ".", ","),
+                        price_tot : accounting.formatNumber((itemsale.quantity * itemsale.price_unit),0, ".", ","),
+                        standar_tot : accounting.formatNumber((itemsale.quantity * saleproducto[0].standard_price),0, ".", ","),
+                        utility : accounting.formatNumber(((itemsale.quantity * itemsale.price_unit) - (itemsale.quantity * saleproducto[0].standard_price)),0, ".", ","),
+                        qty_total : itemsale.quantity,
+                        price_tot_tot : ((itemsale.quantity * itemsale.price_unit)),
+                        standar_tot_tot : ((itemsale.quantity * saleproducto[0].standard_price)),
+                        utility_tot : (((itemsale.quantity * itemsale.price_unit) - (itemsale.quantity * saleproducto[0].standard_price))),
+                        store_id : storeVenta[0].store_ids[0],
+                    });
+                }
+            }
             this.rowsData=data;
             self.content=data;
             this.loadTable(data)
@@ -429,58 +506,35 @@ function report_ventas_pos_orders(reporting){
 
         fectSearch: function(){
             var self = this;
-            var hoy = moment().format('YYYY-MM-DD');
-            var floor =this.$el.find('#current-floor').val();
-            var table =this.$el.find('#current-table').val();
-            var category = this.$el.find('#current-category').val();
-            var store =this.$el.find('#current-store').val();
+            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 store = this.$el.find('#current-store').val();
             var product = this.$el.find('#product').val().split('-');
             var content = self.content;
 
             // Hoy
             if ($('#A').is(":checked")){
                 content = _.filter(content, function (inv){
-                    return inv.date == hoy;
+                    return moment(inv.date).format('YYYY-MM-DD') == today;
                 });
             }
             if ($('#B').is(":checked")){
-                var date = hoy.split('-');
-                var ayer = date[2] - 1;
-                date.splice(2,0);
-                date[2] = '0'+ayer;
                 content = _.filter(content, function (inv){
-                    return inv.date == date[0]+'-'+date[1]+'-'+date[2];
+                    return moment(inv.date).format('YYYY-MM-DD') == yesterday;
                 });
             }
             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];
+                    return moment(inv.date).format('YYYY-MM') == month;
                 });
             }
             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];
+                    return moment(inv.date).format('YYYY-MM') == last_month;
                 });
             }
             if ($('#Z').is(":checked")){
@@ -501,20 +555,6 @@ function report_ventas_pos_orders(reporting){
                 $('#datepicker').css('display','none');
             }
 
-            // Filtrar por piso o delivery
-            // if (floor != 9999999){
-            //     content=_.filter(content, function (inv){
-            //         return inv.floor_id == floor;
-            //     });
-            // }
-
-            // Filtrar por mesa o delivery
-            // if (table != 9999999){
-            //     content=_.filter(content, function (inv){
-            //         return inv.table_id == table;
-            //     });
-            // }
-
             // Buscar Producto
             if (product != ""){
                 content = _.filter(content, function(inv){
@@ -528,11 +568,11 @@ function report_ventas_pos_orders(reporting){
             //     });
             // }
 
-            // if (store != 9999999){
-            //     content=_.filter(content, function (inv){
-            //         return inv.store_id == store;
-            //     });
-            // }
+            if (store != 9999999){
+                content=_.filter(content, function (inv){
+                    return inv.store_id == store;
+                });
+            }
 
             var qty_total_total = _.reduce(_.map(content,function(map){
                 return(map.qty_total);
@@ -682,6 +722,7 @@ function report_ventas_pos_orders(reporting){
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
                         order_name: {halign:'left', fontStyle: 'bold'},
+                        ref: {halign:'left', fontStyle: 'bold'},
                         date_order :{halign:'left'},
                         product_name :{halign:'left' },
                         qty :{halign:'right' },

+ 102 - 0
static/src/reports/report_sale_pos_cab.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="ReportSalePosCab">
+        <div class="report_view">
+            <div class="reporting_page_header">
+                <h1>Histórico de Ventas</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="user">Vendedor: </label>
+                                    <input id="user" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ CI/ Ruc"/>
+                                </div>
+                                <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 class="form-group">
+                                    <label for="current-store">Sucursal: </label>
+                                    <select id="current-store" class="form-control ui-autocomplete-input" name="store"></select>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div id="toolbar">
+                <button class="oe_button oe_form_button oe_highlight btn-block" value="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="number" data-sortable="true">Orden</th>
+                        <th data-field="ref" data-sortable="true">Ref.</th>
+                        <th data-field="partner">Cliente</th>
+                        <th data-field="date_invoice" data-sortable="true">Fecha</th>
+                        <th data-field="amount_total" data-sortable="true" data-align="right">Total</th>
+                        <th data-field="user" data-sortable="true">Vendedor</th>
+                    </tr>
+                </thead>
+            </table>
+            <!-- <canvas></canvas> -->
+            <div id="dialog"></div>
+        </div>
+    </t>
+</template>

+ 6 - 2
static/src/reports/report_stock.xml

@@ -15,6 +15,10 @@
                                 <div class="panel-heading">Características</div>
                                 <div class="panel-body">
                                     <div class="col-xs-6">
+                                        <div class="form-group">
+                                            <label for="current-location">Todas las Ubicaciones: </label>
+                                            <select id="current-location" class="form-control ui-autocomplete-input"  name="current-location"></select>
+                                        </div>
                                         <div class="form-group">
                                             <label for="current-category">Todas la categorias: </label>
                                             <select id="current-category" class="form-control ui-autocomplete-input"  name="current-category"></select>
@@ -49,8 +53,8 @@
                             <th data-field="ean13" data-sortable="true" >Codigo de barras</th>
                             <th data-field="category_name" data-sortable="true" >Categoria</th>
                             <th data-field="qty" data-sortable="true" data-align="center">Cantidad</th>
-                            <!-- <th data-field="standard_price" data-sortable="true" data-align="right">Precio</th>
-                            <th data-field="valuation" data-sortable="true" data-align="right">Valoración</th> -->
+                            <th data-field="location_name" data-sortable="true">Ubicación</th>
+                            <!-- <th data-field="valuation" data-sortable="true" data-align="right">Valoración</th>  -->
                         </tr>
                     </thead>
                 </table>

+ 4 - 3
static/src/reports/report_ventas_pos_orders.xml

@@ -65,10 +65,10 @@
                                     <label for="product">Buscar Producto</label>
                                     <input id="product" type="text" class="form-control ui-autocomplete-input" autocomplete="off" placeholder="Nombre/ Referencia/ Codigo de barras"/>
                                 </div>
-                                <!-- <div class="form-group">
+                                <div class="form-group">
                                     <label for="current-store">Sucursal: </label>
                                     <select id="current-store" class="form-control ui-autocomplete-input" name="store"></select>
-                                </div> -->
+                                </div>
                             </div>
                         </div>
                     </div>
@@ -90,7 +90,8 @@
             data-search="true">
             <thead>
               <tr>
-                <th data-field="order_name" data-sortable="true">Pedido</th>
+                <th data-field="order_name" data-sortable="true">Pos</th>
+                <th data-field="ref" data-sortable="true">Venta</th>
                 <th data-field="date_order" data-sortable="true">Fecha</th>
                 <!-- <th data-field="category_name" data-sortable="true" >Categoria</th>
                 <th data-field="table_name">Lugar</th> -->

+ 3 - 1
templates.xml

@@ -39,6 +39,7 @@
                 <!-- Analisis de compras -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_purchases_invoice_analysis.js" />
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_stock.js" />
+                <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_stock_location.js" />
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_stock_move.js" />
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_refund_invoice_supplier.js" />
                 <!-- account -->
@@ -72,7 +73,8 @@
                  <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_ranking_pos_orders_customer.js"/>
                  <!-- Analisis Pos -->
                  <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_pos_orders.js"/>
-                 <!-- <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_ventas_pos_orders.js"/> -->
+                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_sale_pos_cab.js"/>
+                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_ventas_pos_orders.js"/>
                  <!-- Ranking Customers (Sale)-->
                  <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_ranking_sales_orders_customer.js"/>
                  <!-- Ranking Supplier (Purchase)-->

+ 14 - 2
views/actions.xml

@@ -103,11 +103,17 @@
             <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>
+			<field name="tag">eiru_reporting.sale_pos_order_action_report</field>
+		</record>
+
 		<!-- Analisis de ventas y pos -->
-		<!-- <record id="point_venta_report_action" model="ir.actions.client">
+		<record id="point_venta_report_action" model="ir.actions.client">
 			<field name="name">Analisis de Ventas Generales</field>
 			<field name="tag">eiru_reporting.point_venta_action_report</field>
-		</record> -->
+		</record>
 
         <!-- Ranking de productos mas vendidos -->
         <record id="point_sale_ranking_report_action" model="ir.actions.client">
@@ -225,6 +231,12 @@
             <field name="tag">eiru_reporting.stock_action_report</field>
         </record>
 
+		<!-- Analisis de stock por location-->
+		<record id="stock_location_report_action" model="ir.actions.client">
+			<field name="name">Analisis de Stock por Ubicacion</field>
+			<field name="tag">eiru_reporting.stock_location_action_report</field>
+		</record>
+
         <!-- Analisis de movimientos de stock -->
         <record id="stock_move_report_action" model="ir.actions.client">
             <field name="name">Analisis de movimiento de stock</field>

+ 19 - 8
views/menus.xml

@@ -63,9 +63,6 @@
 	        <!-- Historico de ventas -->
 	        <menuitem id="point_of_sale_report_menu_submenu" parent="point_of_sale_report_parent_menu" name="Historico de Ventas" action="point_sale_report_action" />
 
-            <!-- Analisis de ventas -->
-            <!-- <menuitem id="point_of_sale_venta_menu_submenu" parent="point_of_sale_report_parent_menu" name="Analisis de Ventas Generales" action="point_venta_report_action"/> -->
-
             <!-- Ranking de productos -->
 	        <menuitem id="point_of_sale_ranking_report_menu_submenu" parent="point_of_sale_report_parent_menu" name="Ranking de productos" action="point_sale_ranking_report_action"/>
 
@@ -78,8 +75,19 @@
             <!-- Listado de produccion de pack utilidad -->
             <menuitem id="mrp_utilidad_report_menu_submenu" parent="point_of_sale_report_parent_menu" name="Analisis de Utilidad de Pack de Producto" action="mrp_utilidad_report_action"/>
 
+        <!-- Pos/Venta Submenu -->
+        <menuitem id="posventa_report_parent_menu" name="Ventas/Terminal de Venta" parent="eiru_report_main_menu" sequence="5"/>
+
+            <!-- Analisis de ventas -->
+            <menuitem id="point_of_sale_venta_menu_submenu" parent="posventa_report_parent_menu" name="Analisis de Ventas Generales" action="point_venta_report_action" sequence="0"/>
+
+            <!-- Historico de ventas y pos -->
+            <menuitem id="sale_pos_order_menu_submenu" parent="posventa_report_parent_menu" name="Historico de Ventas" action="sale_pos_order_report_action" sequence="1"/>
+
+
+
         <!-- Quinto Submenu -->
-        <menuitem id="purchase_report_parent_menu" name="Compras" parent="eiru_report_main_menu" sequence="5"/>
+        <menuitem id="purchase_report_parent_menu" name="Compras" parent="eiru_report_main_menu" sequence="6"/>
 
 	        <!-- Analisis de compras -->
 	        <menuitem id="purchase_detail_report_menu_submenu" parent="purchase_report_parent_menu" name="Analisis de compras" action="purchase_detail_report_action" />
@@ -96,7 +104,7 @@
            <!-- Listado de cuentas a pagar vencidas -->
           <menuitem id="accountpendingapagar_detail_report_menu_submenu" parent="purchase_report_parent_menu" name="Listado de cuentas a pagar vencidas" action="accountpendingapagar_detail_report_action" />
         <!-- Sexto Submenu -->
-        <menuitem id="crm_report_parent_menu" name="CRM" parent="eiru_report_main_menu" sequence="6"/>
+        <menuitem id="crm_report_parent_menu" name="CRM" parent="eiru_report_main_menu" sequence="7"/>
 
 	        <!-- CRM -->
 	        <menuitem id="crm_report_menu_submenu" parent="crm_report_parent_menu" name="Historico CRM" action="crm_report_action" />
@@ -111,7 +119,7 @@
 	        <menuitem id="project_report_menu_submenu" parent="crm_report_parent_menu" name="Proyectos" action="project_report_action" />
 
 	    <!-- Septimo Submenu -->
-        <menuitem id="mrp_report_parent_menu" name="Produccion" parent="eiru_report_main_menu" sequence="7"/>
+        <menuitem id="mrp_report_parent_menu" name="Produccion" parent="eiru_report_main_menu" sequence="8"/>
 
 	        <!-- Informe de trabajos -->
 	        <menuitem id="work_report_menu_submenu" parent="mrp_report_parent_menu" name="Informes de trabajos" action="work_report_action" />
@@ -123,10 +131,13 @@
             <menuitem id="rankingmrp_report_menu_submenu" parent="mrp_report_parent_menu" name="Ranking de productos mas producidos" action="mrp_ranking_report_action"/>
 
 	    <!-- Octavo Submenu -->
-        <menuitem id="stock_report_parent_menu" name="Stock" parent="eiru_report_main_menu" sequence="8"/>
+        <menuitem id="stock_report_parent_menu" name="Stock" parent="eiru_report_main_menu" sequence="9"/>
 
 	        <!-- Analisis de stock -->
-	        <menuitem id="stock_report_menu_submenu" parent="stock_report_parent_menu" name="Analisis de Stock" action="stock_report_action" />
+	        <menuitem id="stock_report_menu_submenu" parent="stock_report_parent_menu" name="Analisis de Stock por Ubicacion" action="stock_location_report_action" />
+
+            <!-- Analisis de stock -->
+            <menuitem id="stock_location_report_menu_submenu" parent="stock_report_parent_menu" name="Analisis de Stock" action="stock_report_action" />
 
 	        <!--Analisis de movimientos de stock -->
 	        <menuitem id="stock_move_report_menu_submenu" parent="stock_report_parent_menu" name="Analisis de movimientos de stock" action="stock_move_report_action"/>