Selaa lähdekoodia

FIX ADD Detalles varios

Sebas 6 vuotta sitten
vanhempi
commit
3b0afd6ff2

BIN
__init__.pyc


BIN
controllers.pyc


BIN
models.pyc


+ 58 - 34
static/src/js/reports/report_libro_pos.js

@@ -149,6 +149,10 @@ function report_libro_pos(reporting){
                 return self.fecthResUser();
             }).then(function (ResUser) {
                 self.ResUser = ResUser;
+                self.$el.find('#current-user').append('<option value="9999999">Todos los Vendedores</option>');
+                _.each(ResUser,function(item){
+                self.$el.find('#current-user').append('<option value="' + item.id + '">' + item.name + '</option>');
+            });
                 return self.fecthCompanyCurrency();
             }).then(function(resCompany){
                 self.resCompany = resCompany;
@@ -215,10 +219,10 @@ function report_libro_pos(reporting){
         fecthCompanyCurrency: function(){
             var self = this;
             var defer = $.Deferred();
-            var field=['id','name', 'currency_id'];
+            var field=['id','name', 'currency_id', 'vat'];
             var domain = [['id', '=', self.session.company_id]];
-            var ResCompany = new instance.web.Model('res.company');
-            ResCompany.query(field).filter(domain).all().then(function(results){
+            var resCompany = new instance.web.Model('res.company');
+            resCompany.query(field).filter(domain).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -500,7 +504,7 @@ function report_libro_pos(reporting){
             var data = [];
             var store = [];
             var amount_total_total = 0;
-
+            var cant_item = 0;
             _.each(PosOrder, function(item){
                 order = self.getStatementLine(item.id);
                 store = self.getAccountJournalPos(item.sale_journal[0]);
@@ -518,22 +522,23 @@ function report_libro_pos(reporting){
                 }
                 if(order.length > 0 & store.length > 0 & partner.length > 0){
                     var utc = moment.utc(item.create_date,'YYYY-MM-DD h:mm:ss A');
-                    var date = moment(utc._d).format('DD/MM/YYYY h:mm A');
+                    var date = moment(utc._d).format('DD/MM/YYYY');
                     var date_aux=moment(utc._d).format('YYYY-MM-DD');
 
                     data.push({
                         id : item.id,
+                        cant_item: cant_item+1,
                         number: item.name,
                         origin: item.session_id[1],
                         partner: item.partner_id[1],
                         date_invoice: date,
-                        amount_tax: accounting.formatNumber((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_untaxed: accounting.formatNumber((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_exentas: accounting.formatNumber((exentas * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_tax: accounting.formatMoney((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_untaxed: accounting.formatMoney((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_exentas: accounting.formatMoney((exentas * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_total: accounting.formatMoney((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
                         date: date_aux,
                         partner_id : item.partner_id[0],
-                        ruc: partner[0].ruc,
+                        ruc: self.valorNull(partner[0].ruc),
                         amount : (item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),
                         journal_id: order[0].journal_id[0],
                         journal_name: order[0].journal_id[1],
@@ -544,7 +549,10 @@ function report_libro_pos(reporting){
                         ref_renta : 0,
                         user_id : item.user_id[0],
                         user: item.user_id[1],
-                        store_id : store[0].store_ids[0]
+                        store_id : store[0].store_ids[0],
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
                     });
                 }
             });
@@ -567,7 +575,6 @@ function report_libro_pos(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;
@@ -622,6 +629,12 @@ function report_libro_pos(reporting){
                 });
             }
 
+            var cant_total = _.reduce(_.map(content,function(map){
+                return(map.cant_item);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
             var amount_total_tax = _.reduce(_.map(content,function(map){
                 return(map.tax);
             }),function(memo, num){
@@ -647,7 +660,8 @@ function report_libro_pos(reporting){
             },0);
 
             content.push({
-                number: "Total",
+                number: "Total Items:",
+                date_invoice: accounting.formatNumber((cant_total),0,".",","),
                 amount_tax : accounting.formatNumber((amount_total_tax),0,".",","),
                 amount_untaxed : accounting.formatNumber((amount_total_untaxed),0,".",","),
                 amount_exentas : accounting.formatNumber((amount_total_exentas),0,".",","),
@@ -702,23 +716,27 @@ function report_libro_pos(reporting){
 
         drawPDF: function (getColumns,rows) {
             var self = this;
+            var company = self.resCompany;
+            var company_name= company[0].name;
+            var company_ruc= self.valorNull(company[0].vat);
+            var hoy = moment().format('DD/MM/YYYY');
             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'},
+                styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
                 columnStyles: {
-                    number : {columnWidth: 15},
-                    ruc : {columnWidth: 20},
-                    partner : {columnWidth: 20},
+                    number : {columnWidth: 24},
                     date_invoice : {columnWidth: 18},
+                    ruc : {columnWidth: 20},
+                    partner : {columnWidth: 35},
                     amount_tax : {halign:'right',columnWidth: 18},
                     amount_untaxed : {halign:'right',columnWidth: 18},
                     amount_exentas : {halign:'right',columnWidth: 18},
                     ref_iva : {halign:'right',columnWidth: 10},
-                    ref_renta : {halign:'right',columnWidth: 10},
+                    ref_renta : {halign:'right',columnWidth: 12},
                     amount_total : {halign:'right',columnWidth: 18},
                     journal_name : {columnWidth: 15},
                     user : {halign:'left',columnWidth: 14},
@@ -728,21 +746,27 @@ function report_libro_pos(reporting){
                     pdfDoc.setFontSize(12);
                     pdfDoc.setFontStyle('bold');
                     pdfDoc.setTextColor(40);
-                    pdfDoc.text('Libro 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);
-                    }
+                    pdfDoc.text('Libro de Ventas ', data.settings.margin.left, 10);
+
+                    var fecha = '';
+
+                      if(desde){
+                          fecha=fecha.concat(' Desde: '+ desde);
+                      }else{
+                          fecha=fecha.concat(' Desde: '+ hoy);
+                      }
+                      if (hasta){
+                          fecha=fecha.concat(' Hasta: '+ hasta);
+                      }else{
+                          fecha=fecha.concat(' Hasta: '+ hoy);
+                      }
+
+                       pdfDoc.setFontSize(9);
+                       pdfDoc.setFontStyle('normal');
+                       pdfDoc.setTextColor(40)
+                       pdfDoc.text(6,14,fecha);
+                       pdfDoc.text(135,9,'Empresa: '+ company_name);
+                       pdfDoc.text(135,14,'RUC. N°: '+ company_ruc);
                     // FOOTER
                     var str = "Pagina  " + data.pageCount;
                     // Total page number plugin only available in jspdf v1.0+
@@ -759,7 +783,7 @@ function report_libro_pos(reporting){
             if (typeof pdfDoc.putTotalPages === 'function') {
                 pdfDoc.putTotalPages(totalPagesExp);
             }
-            pdfDoc.save('Libro de Venta.pdf')
+            pdfDoc.save('Libro de Ventas.pdf')
         },
     });
 }

+ 62 - 31
static/src/js/reports/report_libro_venta.js

@@ -25,6 +25,7 @@ function report_libro_venta(reporting){
             'change #from' : 'factSearch',
             'change #to' : 'factSearch',
             'change #user' : 'factSearch',
+            'change #current-company' : 'factSearch',
             'change #current-journal' : 'factSearch',
             'change #current-store' : 'factSearch',
             'click-row.bs.table #table ' : 'ckickAnalysisDetail',
@@ -150,6 +151,14 @@ function report_libro_venta(reporting){
                 return self.fecthCompanyCurrency();
             }).then(function(resCompany){
                 self.resCompany = resCompany;
+                if(resCompany.length > 1){
+                  self.$el.find('#current-company').append('<option value="9999999">Todas las empresas</option>');
+                  _.each(resCompany,function(item){
+                      self.$el.find('#current-company').append('<option value="' + item.id + '">' + item.name + '</option>');
+                  });
+            }else{
+                  self.$el.find('.company').css('display','none');
+            }
                 return self.fecthResUser();
             }).then(function (ResUser) {
                 self.ResUser = ResUser;
@@ -245,10 +254,10 @@ function report_libro_venta(reporting){
         fecthCompanyCurrency: function(){
             var self = this;
             var defer = $.Deferred();
-            var field=['id','name', 'currency_id'];
+            var field=['id','name', 'currency_id', 'vat'];
             var domain = [['id', '=', self.session.company_id]];
-            var ResCompany = new instance.web.Model('res.company');
-            ResCompany.query(field).filter(domain).all().then(function(results){
+            var resCompany = new instance.web.Model('res.company');
+            resCompany.query(field).filter(domain).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -415,6 +424,7 @@ function report_libro_venta(reporting){
             var store = [];
             var partner = [];
             var amount_total_total = 0;
+            var cant_item = 0;
             _.each(invoices, function(item){
                 order = self.getSaleOrder(item.user_id[0]);
                 store= self.getAccountJournal(item.journal_id[0]);
@@ -428,12 +438,12 @@ function report_libro_venta(reporting){
                 var iva_10 = 0;
                 // Determinar si fue aplicado algun impuesto a la factura.
                 if(item.amount_total == item.amount_untaxed){
-                       exentas = accounting.formatNumber(item.amount_untaxed,"","");
+                       exentas = item.amount_untaxed;
                 }else{
                     // // Si fue aplicado impuesto, determina si fue de 10% o 5%.
                     // if(IVA == TAX){
-                       untaxed = accounting.formatNumber(item.amount_untaxed,"","");
-                       iva_10 = accounting.formatNumber(item.amount_tax,"","");
+                       untaxed = item.amount_untaxed;
+                       iva_10 = item.amount_tax;
                     //    tasa_10 = accounting.formatNumber(invoice.amount_untaxed,"","");
                     // }else{
                     //    iva_5 = accounting.formatNumber(invoice.amount_tax,"","");;
@@ -451,16 +461,17 @@ function report_libro_venta(reporting){
                 if(order.length > 0 & store.length > 0 & partner.length > 0){
                     data.push({
                         id : item.id,
+                        cant_item: cant_item+1,
                         number: item.number,
                         partner: item.partner_id[1],
                         date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"),
-                        amount_tax: accounting.formatNumber((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_untaxed: accounting.formatNumber((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_exentas: accounting.formatNumber((exentas * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_tax: accounting.formatMoney((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_untaxed: accounting.formatMoney((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_exentas: accounting.formatMoney((exentas * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_total: accounting.formatMoney((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
                         date: item.date_invoice,
                         partner_id : item.partner_id[0],
-                        ruc: partner[0].ruc,
+                        ruc: self.valorNull(partner[0].ruc),
                         tax : (iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),
                         untaxed : (untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),
                         exentas: (exentas * (CurrencyBase.rate_silent/currency.rate_silent)),
@@ -469,7 +480,10 @@ function report_libro_venta(reporting){
                         journal_name: pago_name,
                         user_id : item.user_id[0],
                         user: item.user_id[1],
-                        store_id : store[0].store_ids[0]
+                        store_id : store[0].store_ids[0],
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
                     });
                 }
             });
@@ -551,6 +565,12 @@ function report_libro_venta(reporting){
                 });
             }
 
+            var cant_total = _.reduce(_.map(content,function(map){
+                return(map.cant_item);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
             var amount_total_tax = _.reduce(_.map(content,function(map){
                 return(map.tax);
             }),function(memo, num){
@@ -576,7 +596,8 @@ function report_libro_venta(reporting){
             },0);
 
             content.push({
-                number: "Total",
+                number: "Total Items:",
+                date_invoice: accounting.formatNumber((cant_total),0,".",","),
                 amount_tax : accounting.formatNumber((amount_total_tax),0,".",","),
                 amount_untaxed : accounting.formatNumber((amount_total_untaxed),0,".",","),
                 amount_exentas : accounting.formatNumber((amount_total_exentas),0,".",","),
@@ -631,6 +652,10 @@ function report_libro_venta(reporting){
 
         drawPDF: function (getColumns,rows) {
             var self = this;
+            var company = self.resCompany;
+            var company_name= company[0].name;
+            var company_ruc= self.valorNull(company[0].vat);
+            var hoy = moment().format('DD/MM/YYYY');
             var desde =(this.$el.find('#from').val());
             var hasta =(this.$el.find('#to').val());
             var totalPagesExp = "{total_pages_count_string}";
@@ -639,9 +664,9 @@ function report_libro_venta(reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
                 columnStyles: {
-                    number : {columnWidth: 15},
+                    number : {columnWidth: 25},
                     ruc : {columnWidth: 20},
-                    partner : {columnWidth: 20},
+                    partner : {columnWidth: 35},
                     date_invoice : {columnWidth: 18},
                     amount_tax : {halign:'right',columnWidth: 18},
                     amount_untaxed : {halign:'right',columnWidth: 18},
@@ -657,21 +682,27 @@ function report_libro_venta(reporting){
                     pdfDoc.setFontSize(12);
                     pdfDoc.setFontStyle('bold');
                     pdfDoc.setTextColor(40);
-                    pdfDoc.text('Libro 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);
-                    }
+                    pdfDoc.text('Libro de Ventas ', data.settings.margin.left, 10);
+
+                    var fecha = '';
+
+                      if(desde){
+                          fecha=fecha.concat(' Desde: '+ desde);
+                      }else{
+                          fecha=fecha.concat(' Desde: '+ hoy);
+                      }
+                      if (hasta){
+                          fecha=fecha.concat(' Hasta: '+ hasta);
+                      }else{
+                          fecha=fecha.concat(' Hasta: '+ hoy);
+                      }
+
+                       pdfDoc.setFontSize(9);
+                       pdfDoc.setFontStyle('normal');
+                       pdfDoc.setTextColor(40)
+                       pdfDoc.text(6,14,fecha);
+                       pdfDoc.text(135,9,'Empresa: '+ company_name);
+                       pdfDoc.text(135,14,'RUC. N°: '+ company_ruc);
                     // FOOTER
                     var str = "Pagina  " + data.pageCount;
                     // Total page number plugin only available in jspdf v1.0+
@@ -688,7 +719,7 @@ function report_libro_venta(reporting){
             if (typeof pdfDoc.putTotalPages === 'function') {
                 pdfDoc.putTotalPages(totalPagesExp);
             }
-            pdfDoc.save('Libro de Venta.pdf')
+            pdfDoc.save('Libro de Ventas.pdf')
         },
     });
 }

+ 66 - 39
static/src/js/reports/report_libro_venta_pos.js

@@ -226,10 +226,10 @@ function report_libro_venta_pos(reporting){
         fecthCompanyCurrency: function(){
             var self = this;
             var defer = $.Deferred();
-            var field=['id','name', 'currency_id'];
+            var field=['id','name', 'currency_id', 'vat'];
             var domain = [['id', '=', self.session.company_id]];
-            var ResCompany = new instance.web.Model('res.company');
-            ResCompany.query(field).filter(domain).all().then(function(results){
+            var resCompany = new instance.web.Model('res.company');
+            resCompany.query(field).filter(domain).all().then(function(results){
                 defer.resolve(results);
             });
             return defer;
@@ -514,6 +514,7 @@ function report_libro_venta_pos(reporting){
             var data = [];
             var store = [];
             var amount_total_total = 0;
+            var cant_item = 0;
             _.each(invoices, function(item){
                 order = self.getSaleOrder(item.user_id[0]);
                 partner= self.getResPartner(item.partner_id[0]);
@@ -527,10 +528,10 @@ function report_libro_venta_pos(reporting){
                 var iva_10 = 0;
                 // Determinar si fue aplicado algun impuesto a la factura.
                 if(item.amount_total == item.amount_untaxed){
-                       exentas = accounting.formatNumber(item.amount_untaxed,"","");
+                       exentas = item.amount_untaxed;
                 }else{
-                       untaxed = accounting.formatNumber(item.amount_untaxed,"","");
-                       iva_10 = accounting.formatNumber(item.amount_tax,"","");
+                       untaxed = item.amount_untaxed;
+                       iva_10 = item.amount_tax;
                 }
 
                 if (voucher != undefined){
@@ -543,17 +544,18 @@ function report_libro_venta_pos(reporting){
                 if(order.length > 0 & store.length > 0 & partner.length > 0){
                     data.push({
                         id : item.id,
+                        cant_item: cant_item+1,
                         number: item.number,
                         ref: "",
                         partner: item.partner_id[1],
                         date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"),
-                        amount_tax: accounting.formatNumber((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_untaxed: accounting.formatNumber((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_exentas: accounting.formatNumber((exentas * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_tax: accounting.formatMoney((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_untaxed: accounting.formatMoney((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_exentas: accounting.formatMoney((exentas * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_total: accounting.formatMoney((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
                         date: moment(item.date_invoice).format("YYYY-MM-DD"),
                         partner_id : item.partner_id[0],
-                        ruc: partner[0].ruc,
+                        ruc: self.valorNull(partner[0].ruc),
                         tax : (iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),
                         untaxed : (untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),
                         exentas: (exentas * (CurrencyBase.rate_silent/currency.rate_silent)),
@@ -564,7 +566,10 @@ function report_libro_venta_pos(reporting){
                         ref_renta : 0,
                         user_id : item.user_id[0],
                         user: item.user_id[1],
-                        store_id : store[0].store_ids[0]
+                        store_id : store[0].store_ids[0],
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
                     });
                 }
             });
@@ -586,23 +591,24 @@ function report_libro_venta_pos(reporting){
                 }
                 if(order.length > 0 & store.length > 0 & partner.length > 0){
                     var utc = moment.utc(item.create_date,'YYYY-MM-DD h:mm:ss A');
-                    var date = moment(utc._d).format('DD/MM/YYYY h:mm A');
+                    var date = moment(utc._d).format('DD/MM/YYYY');
                     var date_aux=moment(utc._d).format('YYYY-MM-DD');
 
                     data.push({
                         id : item.id,
+                        cant_item: cant_item+1,
                         number: "",
                         ref: item.name,
                         origin: item.session_id[1],
                         partner: item.partner_id[1],
                         date_invoice: date,
-                        amount_tax: accounting.formatNumber((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_untaxed: accounting.formatNumber((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_exentas: accounting.formatNumber((exentas * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
-                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_tax: accounting.formatMoney((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_untaxed: accounting.formatMoney((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_exentas: accounting.formatMoney((exentas * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
+                        amount_total: accounting.formatMoney((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
                         date: date_aux,
                         partner_id : item.partner_id[0],
-                        ruc: partner[0].ruc,
+                        ruc: self.valorNull(partner[0].ruc),
                         amount : (item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),
                         journal_id: order[0].journal_id[0],
                         journal_name: order[0].journal_id[1],
@@ -613,7 +619,10 @@ function report_libro_venta_pos(reporting){
                         ref_renta : 0,
                         user_id : item.user_id[0],
                         user: item.user_id[1],
-                        store_id : store[0].store_ids[0]
+                        store_id : store[0].store_ids[0],
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
                     });
                 }
             });
@@ -691,6 +700,12 @@ function report_libro_venta_pos(reporting){
                 });
             }
 
+            var cant_total = _.reduce(_.map(content,function(map){
+                return(map.cant_item);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
             var amount_total_tax = _.reduce(_.map(content,function(map){
                 return(map.tax);
             }),function(memo, num){
@@ -716,7 +731,8 @@ function report_libro_venta_pos(reporting){
             },0);
 
             content.push({
-                number: "Total",
+                number: "Total Items:",
+                ref: accounting.formatNumber((cant_total),0,".",","),
                 amount_tax : accounting.formatNumber((amount_total_tax),0,".",","),
                 amount_untaxed : accounting.formatNumber((amount_total_untaxed),0,".",","),
                 amount_exentas : accounting.formatNumber((amount_total_exentas),0,".",","),
@@ -771,6 +787,10 @@ function report_libro_venta_pos(reporting){
 
         drawPDF: function (getColumns,rows) {
             var self = this;
+            var company = self.resCompany;
+            var company_name= company[0].name;
+            var company_ruc= self.valorNull(company[0].vat);
+            var hoy = moment().format('DD/MM/YYYY');
             var desde =(this.$el.find('#from').val());
             var hasta =(this.$el.find('#to').val());
             var totalPagesExp = "{total_pages_count_string}";
@@ -779,16 +799,16 @@ function report_libro_venta_pos(reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
                 columnStyles: {
-                    number : {columnWidth: 17},
+                    number : {columnWidth: 23},
                     ref : {columnWidth: 15},
                     ruc : {columnWidth: 18},
-                    partner : {columnWidth: 20},
+                    partner : {columnWidth: 32},
                     date_invoice : {columnWidth: 18},
                     amount_tax : {halign:'right',columnWidth: 17},
                     amount_untaxed : {halign:'right',columnWidth: 17},
                     amount_exentas : {halign:'right',columnWidth: 17},
                     ref_iva : {halign:'right',columnWidth: 8},
-                    ref_renta : {halign:'right',columnWidth: 8},
+                    ref_renta : {halign:'right',columnWidth: 10},
                     amount_total : {halign:'right',columnWidth: 17},
                     journal_name : {columnWidth: 15},
                     user : {halign:'left',columnWidth: 14},
@@ -798,21 +818,28 @@ function report_libro_venta_pos(reporting){
                     pdfDoc.setFontSize(12);
                     pdfDoc.setFontStyle('bold');
                     pdfDoc.setTextColor(40);
-                    pdfDoc.text('Libro 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);
-                    }
+                    pdfDoc.text('Libro de Ventas ', data.settings.margin.left, 10);
+
+                    var fecha = '';
+
+                      if(desde){
+                          fecha=fecha.concat(' Desde: '+ desde);
+                      }else{
+                          fecha=fecha.concat(' Desde: '+ hoy);
+                      }
+                      if (hasta){
+                          fecha=fecha.concat(' Hasta: '+ hasta);
+                      }else{
+                          fecha=fecha.concat(' Hasta: '+ hoy);
+                      }
+
+                       pdfDoc.setFontSize(9);
+                       pdfDoc.setFontStyle('normal');
+                       pdfDoc.setTextColor(40)
+                       pdfDoc.text(6,14,fecha);
+                       pdfDoc.text(135,9,'Empresa: '+ company_name);
+                       pdfDoc.text(135,14,'RUC. N°: '+ company_ruc);
+
                     // FOOTER
                     var str = "Pagina  " + data.pageCount;
                     // Total page number plugin only available in jspdf v1.0+
@@ -829,7 +856,7 @@ function report_libro_venta_pos(reporting){
             if (typeof pdfDoc.putTotalPages === 'function') {
                 pdfDoc.putTotalPages(totalPagesExp);
             }
-            pdfDoc.save('Libro de Venta.pdf')
+            pdfDoc.save('Libro de Ventas.pdf')
         },
     });
 }

+ 775 - 0
static/src/js/reports/report_libro_ventapos_dental.js

@@ -0,0 +1,775 @@
+function report_libro_ventapos_dental(reporting){
+    "use strict";
+
+    var instance = openerp;
+
+    reporting.ReportLibroVentaPosDentalWidget = reporting.Base.extend({
+        template: 'ReportLibroVentaPosDental',
+        modules: ['point_of_sale'],
+        content: [],
+        rowsData :[],
+        invoices: [],
+        model: [],
+        AccountVoucher:[],
+        resCompany:[],
+        ResCurrency:[],
+        accountJournal:[],
+        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',
+            'change #current-warehouse' : '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 === 'partner'){
+                this.do_action({
+                    name:"Registro",
+                    type: 'ir.actions.act_window',
+                    res_model: "res.partner",
+                    views: [[false,'form']],
+                    target: 'new',
+                    domain: [['id','=', row.partner_id]],
+                    context: {},
+                    flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
+                    res_id: row.partner_id,
+                });
+            }
+            e.stopImmediatePropagation();
+        },
+        submitForm: function () {
+            var self = this;
+            self.fecthIrModuleModule().then(function(modules){
+                self.modules = modules;
+                return modules;
+            }).then(function(modules){
+                return self.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;
+                 self.$el.find('#current-journal').append('<option value="9999999">Todas las formas de pagos</option>');
+                 _.each(AccountJournal,function(item){
+                     self.$el.find('#current-journal').append('<option value="' + item.id + '">' + item.name + '</option>');
+                 });
+                 return self.fetchInvoiceV2();
+            }).then(function (invoices){
+                self.invoices = invoices;
+                return self.fetchSaleOrder();
+            }).then(function (SaleOrder){
+               self.SaleOrder = SaleOrder;
+               return self.fetchWarehouse();
+            }).then(function (Warehouse){
+               self.Warehouse = Warehouse;
+               self.$el.find('#current-warehouse').append('<option value="9999999">Todas los Vendedores</option>');
+               _.each(Warehouse,function(item){
+                   self.$el.find('#current-warehouse').append('<option value="' + item.id + '">' + item.name + '</option>');
+               });
+                return self.fetchAccountVoucher();
+            }).then(function (AccountVoucher) {
+                self.AccountVoucher = AccountVoucher;
+                return self.fetchResPartner();
+            }).then(function(ResPartner){
+                self.ResPartner = ResPartner;
+                return self.fetchResCurrency();
+             }).then(function(ResCurrency){
+                self.ResCurrency = ResCurrency;
+                return self.fecthCompanyCurrency();
+            }).then(function(resCompany){
+                self.resCompany = resCompany;
+                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]];
+            var AccountJournal = new instance.web.Model('account.journal');
+            AccountJournal.query(field).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchResCurrency : function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
+            var domain = [['active', '=', true]];
+            var ResCurrency = new instance.web.Model('res.currency');
+            ResCurrency.query(fields).filter(domain).all().then(function(results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fecthCompanyCurrency: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field=['id','name', 'currency_id', 'vat'];
+            var domain = [['id', '=', self.session.company_id]];
+            var ResCompany = new instance.web.Model('res.company');
+            ResCompany.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', 'reference', 'state', 'journal_id', 'currency_id', 'user_id','date_invoice','amount_total','amount_tax','amount_untaxed','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;
+        },
+
+        fetchAccountVoucher: function () {
+            var self = this;
+            var defer = $.Deferred();
+            var AccountVoucher = new instance.web.Model('account.voucher');
+            AccountVoucher.query(['id', 'number','reference','journal_id','type']).filter([['state', '=', 'posted']]).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchSaleOrder: function () {
+            var self = this;
+            var filter ="[['state', 'in',['progress','done']]]";
+            var warehouse_ids = _.flatten(_.map(self.Warehouse, function (item) {
+                return item.id;
+            }));
+            if (warehouse_ids){
+                filter=filter.concat(",['warehouse_id', 'in',["+ warehouse_ids+"]]");
+            }
+            filter=filter.concat("]");
+            var field =['id', 'number', 'name','origin', 'state', 'warehouse_id'];
+            var defer = $.Deferred();
+            var SaleOrder = new instance.web.Model('sale.order');
+            SaleOrder.query(field).filter(filter).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchWarehouse: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var field=['id', 'name'];
+            var Warehouse = new instance.web.Model('stock.warehouse');
+            Warehouse.query(field).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fetchResPartner: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var ResPartner = new instance.web.Model('res.partner');
+            ResPartner.query(['id', 'name', 'ruc']).filter([['active', '=', true], ['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;
+            });
+        },
+
+        getWarehouse: function (id) {
+            var self = this;
+            return _.filter(self.Warehouse,function (item) {
+                return item.id === id;
+            });
+        },
+
+        getResPartner: function (id) {
+            var self = this;
+            return _.filter(self.ResPartner,function (item) {
+                return item.id === id;
+            });
+        },
+
+        getAccountVoucher: function (id) {
+            var self = this;
+            return _.filter(self.AccountVoucher,function (item) {
+                return item.reference === id;
+            });
+        },
+
+        getSaleOrder: function (id) {
+            var self = this;
+            return _.filter(self.SaleOrder,function (item) {
+                return item.name === id;
+            });
+        },
+
+        getResCurrency: function (id) {
+            var self = this;
+            return _.filter(self.ResCurrency,function (item) {
+                return item.id === id;
+            })
+        },
+
+        getResUser: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 CurrencyBase = self.getResCurrency(self.resCompany[0].currency_id[0]).shift();
+            var order = [];
+            var data = [];
+            var store = [];
+            var sale = [];
+            var warehouse = [];
+            var partner = [];
+            var amount_total_total = 0;
+            _.each(invoices, function(item){
+                order = self.getResUser(item.user_id[0]);
+                store = self.getAccountJournal(item.journal_id[0]);
+                partner = self.getResPartner(item.partner_id[0]);
+                var currency = self.getResCurrency(item.currency_id[0]).shift();
+                var voucher = self.getAccountVoucher(item.number).shift();
+                sale = self.getSaleOrder(item.origin);
+
+                // warehouse = self.getWarehouse(sale.warehouse_id[0]);
+                var pago = '';
+                var pago_name = '';
+                var untaxed = 0;
+                var exentas = 0;
+                var iva_10 = 0;
+                // Determinar si fue aplicado algun impuesto a la factura.
+                if(item.amount_total == item.amount_untaxed){
+                       exentas = accounting.formatNumber(item.amount_untaxed,"","");
+                }else{
+                    // // Si fue aplicado impuesto, determina si fue de 10% o 5%.
+                    // if(IVA == TAX){
+                       untaxed = accounting.formatNumber(item.amount_untaxed,"","");
+                       iva_10 = accounting.formatNumber(item.amount_tax,"","");
+                    //    tasa_10 = accounting.formatNumber(invoice.amount_untaxed,"","");
+                    // }else{
+                    //    iva_5 = accounting.formatNumber(invoice.amount_tax,"","");;
+                    //    tasa_5 = accounting.formatNumber(invoice.amount_untaxed,"","");
+                    // }
+                }
+
+                if (voucher != undefined){
+                    pago = voucher.journal_id[0];
+                    pago_name=voucher.journal_id[1];
+                }else{
+                    pago = '';
+                    pago_name= '';
+                }
+                if(order.length > 0 & store.length > 0 & partner.length > 0 & sale.length > 0){
+                    data.push({
+                        id : item.id,
+                        number: item.number.trim(),
+                        partner: item.partner_id[1],
+                        date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"),
+                        amount_tax: accounting.formatNumber((iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_untaxed: accounting.formatNumber((untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_exentas: accounting.formatNumber((exentas * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        date: item.date_invoice,
+                        partner_id : item.partner_id[0],
+                        ruc: partner[0].ruc,
+                        tax : (iva_10 * (CurrencyBase.rate_silent/currency.rate_silent)),
+                        untaxed : (untaxed * (CurrencyBase.rate_silent/currency.rate_silent)),
+                        exentas: (exentas * (CurrencyBase.rate_silent/currency.rate_silent)),
+                        amount : (item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),
+                        journal_id: pago,
+                        journal_name: pago_name,
+                        user_id : sale[0].warehouse_id[0],
+                        user: sale[0].warehouse_id[1],
+                        store_id : store[0].store_ids[0],
+                        /*==============================
+                            TOTAL FOOTER CONFIGURATION
+                        ==============================*/
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
+                    });
+                }
+            });
+            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 warehouse = this.$el.find('#current-warehouse').val();
+            var journal = this.$el.find('#current-journal').val();
+            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 (warehouse != ""){
+                content = _.filter(content,function(inv){
+                    return inv.user_id == warehouse[0];
+                });
+            }
+            if (store != 9999999){
+                content =_.filter(content, function (inv){
+                    return inv.store_id == store;
+                });
+            }
+
+            if(journal != 9999999){
+                content =_.filter(content, function (inv){
+                    return inv.journal_id == journal;
+                });
+            }
+
+            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();
+            var row = table.bootstrapTable('getData');
+
+            var amount_total_tax = _.reduce(_.map(row,function(map){
+                return(map.tax);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
+            var amount_total_untaxed = _.reduce(_.map(row,function(map){
+                return(map.untaxed);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
+            var amount_total_exentas = _.reduce(_.map(row,function(map){
+                return(map.exentas);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
+            var amount_total_total = _.reduce(_.map(row,function(map){
+                return(map.amount);
+            }),function(memo, num){
+                return memo + num;
+            },0);
+
+            row.push({
+                number: "Totales:",
+                amount_tax : accounting.formatNumber((amount_total_tax),0,".",","),
+                amount_untaxed : accounting.formatNumber((amount_total_untaxed),0,".",","),
+                amount_exentas : accounting.formatNumber((amount_total_exentas),0,".",","),
+                amount_total: accounting.formatNumber((amount_total_total),0,".",","),
+            });
+
+            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 company = self.resCompany;
+            var company_name= company[0].name;
+            var company_ruc= company[0].vat;
+            var hoy = moment().format('DD/MM/YYYY');
+            var desde =(this.$el.find('#from').val());
+            var hasta =(this.$el.find('#to').val());
+            var totalPagesExp = "{total_pages_count_string}";
+            var pdfDoc = new jsPDF("l");
+
+            pdfDoc.autoTable(getColumns, rows, {
+                styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
+                columnStyles: {
+                    number : {columnWidth: 60},
+                    partner : {columnWidth: 65},
+                    ruc : {columnWidth: 18},
+                    date_invoice : {columnWidth: 17},
+                    amount_tax : {halign:'right',columnWidth: 18},
+                    amount_untaxed : {halign:'right',columnWidth: 19},
+                    amount_exentas : {halign:'right',columnWidth: 19},
+                    ref_iva : {columnWidth: 16},
+                    ref_renta : {columnWidth: 16},
+                    amount_total : {halign:'right',columnWidth: 19},
+                    journal_name : {columnWidth: 15},
+                    user : {halign:'left',columnWidth: 13},
+                },
+                margin: { top: 16, horizontal: 7},
+                addPageContent: function (data) {
+                    pdfDoc.setFontSize(12);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Libro de Ventas ', data.settings.margin.left, 10);
+
+                    var fecha = '';
+
+                    if(desde){
+                        fecha=fecha.concat(' Desde: '+ desde);
+                    }else{
+                        fecha=fecha.concat(' Desde: '+ hoy);
+                    }
+                    if (hasta){
+                        fecha=fecha.concat(' Hasta: '+ hasta);
+                    }else{
+                        fecha=fecha.concat(' Hasta: '+ hoy);
+                    }
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40)
+                    pdfDoc.text(6,14,fecha);
+                    pdfDoc.text(135,9,'Empresa: '+ company_name);
+                    pdfDoc.text(135,14,'RUC. N°: '+ company_ruc);
+
+                    // 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('Libro de Ventas.pdf')
+        },
+    });
+}

+ 11 - 12
static/src/js/reports/report_pos_orders.js

@@ -800,18 +800,17 @@ function report_pos_orders(reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
-                        order_name: {halign:'left', fontStyle: 'bold'},
-                        date_invoice :{halign:'left' , columnWidth: '8px'},
-                        partner :{halign:'left' , columnWidth: '8px'},
-                        category_name :{halign:'left', columnWidth: '8px'},
-                        table_name :{halign:'left', columnWidth: '7px'},
-                        product_name :{halign:'left' },
-                        qty :{halign:'right' },
-                        price_unit : {halign:'right' },
-                        standard_price : {halign:'right' },
-                        price_tot : {halign:'right' },
-                        standar_tot : {halign:'right' },
-                        utility : {halign:'right'},
+                        order_name: {halign:'left'},
+                        date_invoice :{columnWidth: 26, halign:'left'},
+                        partner :{columnWidth: 27, halign:'left' },
+                        product_name :{columnWidth: 68, halign:'left' },
+                        category_name :{halign:'left', columnWidth: 25},
+                        qty :{halign:'right',columnWidth: 9},
+                        price_unit : {halign:'right',columnWidth: 15},
+                        standard_price : {halign:'right',columnWidth: 18},
+                        price_tot : {halign:'right' ,columnWidth: 20},
+                        standar_tot : {halign:'right' ,columnWidth: 20},
+                        utility : {halign:'right',columnWidth: 19}
                     },
 
                 margin: { top: 16, horizontal: 7},

+ 8 - 2
static/src/js/reports/report_sale_cab.js

@@ -437,7 +437,7 @@ function report_sale_cab(reporting){
                         number: item.number,
                         partner: item.partner_id[1],
                         date_invoice: moment(item.date_invoice).format("DD/MM/YYYY"),
-                        amount_total: accounting.formatNumber((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)),0,".",","),
+                        amount_total: accounting.formatMoney((item.amount_total * (CurrencyBase.rate_silent/currency.rate_silent)), '', CurrencyBase.decimal_places, CurrencyBase.thousands_separator, CurrencyBase.decimal_separator),
                         date: item.date_invoice,
                         partner_id : item.partner_id[0],
                         ruc: partner[0].ruc,
@@ -446,7 +446,13 @@ function report_sale_cab(reporting){
                         journal_name: pago_name,
                         user_id : item.user_id[0],
                         user: item.user_id[1],
-                        store_id : store[0].store_ids[0]
+                        store_id : store[0].store_ids[0],
+                        /*==============================
+                           TOTAL FOOTER CONFIGURATION
+                        ==============================*/
+                        decimal_places : CurrencyBase.decimal_places,
+                        thousands_separator: CurrencyBase.thousands_separator,
+                        decimal_separator: CurrencyBase.decimal_separator,
                     });
                 }
             });

+ 10 - 10
static/src/js/reports/report_sales_invoice_analysis.js

@@ -806,19 +806,19 @@ function report_sales_invoice_analysis (reporting){
                 styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
                 columnStyles: {
                               number: {columnWidth: 23},
-                              date_create :{columnWidth: 18},
-                              partner_name:{columnWidth: 16},
+                              date_create :{columnWidth: 17},
+                              partner_name:{columnWidth: 20},
                               journal_name:{columnWidth: 25},
                               ean13:{columnWidth: 12},
                               product_name :{columnWidth: 45},
-                              category_name : {columnWidth: 40},
-                              quantity :{halign:'right',columnWidth: 9},
-                              price_unity : {halign:'right',columnWidth: '20%'},
-                              standar_price : {halign:'right',columnWidth: '18%'},
-                              price_tot : {halign:'right' ,columnWidth: '20%'},
-                              standar_tot : {halign:'right' ,columnWidth: '18%'},
-                              utility : {halign:'right',columnWidth: 20},
-                              user_name : {columnWidth: '5%'},
+                              category_name : {columnWidth: 33},
+                              quantity :{halign:'right',columnWidth: 8},
+                              price_unity : {halign:'right',columnWidth: 18},
+                              standar_price : {halign:'right',columnWidth: 18},
+                              price_tot : {halign:'right' ,columnWidth: 18},
+                              standar_tot : {halign:'right' ,columnWidth: 19},
+                              utility : {halign:'right',columnWidth: 17},
+                              user_name : {columnWidth: 15},
                           },
                 margin: { top: 16, horizontal: 7},
                 addPageContent: function (data) {

+ 20 - 17
static/src/js/reports/report_ventas_pos_orders.js

@@ -93,17 +93,17 @@ function report_ventas_pos_orders(reporting){
         },
 
         clickAnalysisDetail: function(e, row, $element, field){
-            if (field == 'ref'){
+            if (field == 'invoice_name'){
                 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]],
+                    domain: [['type', '=', 'out_invoice'],['id','=', row.ref]],
                     context: {},
                     flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
-                    res_id: row.id,
+                    res_id: row.ref,
                 });
             }
             if (field == 'order_name'){
@@ -113,10 +113,10 @@ function report_ventas_pos_orders(reporting){
                     res_model: "pos.order",
                     views: [[false,'form']],
                     target: 'new',
-                    domain: [['id','=', row.id]],
+                    domain: [['id','=', row.order_id]],
                     context: {},
                     flags: {'form': {'action_buttons': false, 'options': {'mode': 'view'}}},
-                    res_id: row.id,
+                    res_id: row.order_id,
                 });
             }
             if (field == 'product_name'){
@@ -560,6 +560,7 @@ function report_ventas_pos_orders(reporting){
                                 order_id : item.order_id[0],
                                 order_name: item.order_id[1],
                                 ref : "",
+                                invoice_name : "",
                                 partner_id : order.partner_id[0],
                                 product_id : item.product_id[0],
                                 number : order.name,
@@ -609,7 +610,9 @@ function report_ventas_pos_orders(reporting){
                             data.push({
                                 id : item.id,
                                 order_id : "",
-                                ref : item.invoice_id[1],
+                                order_name: "",
+                                ref : item.invoice_id[0],
+                                invoice_name : item.invoice_id[1],
                                 partner_id : invoice.partner_id[0],
                                 product_id : item.product_id[0],
                                 number : invoice.number,
@@ -880,19 +883,19 @@ function report_ventas_pos_orders(reporting){
             var pdfDoc = new jsPDF('l');
 
             pdfDoc.autoTable(getColumns, rows, {
-                styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
+                styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
                 columnStyles: {
-                        order_name: {halign:'left', fontStyle: 'bold'},
+                        order_name: {halign:'left'},
                         ref: {halign:'left', fontStyle: 'bold'},
-                        date_order :{halign:'left'},
-                        partner :{halign:'left' },
-                        product_name :{halign:'left' },
-                        qty :{halign:'right' },
-                        price_unit : {halign:'right' },
-                        standard_price : {halign:'right' },
-                        price_tot : {halign:'right' },
-                        standar_tot : {halign:'right' },
-                        utility : {halign:'right'}
+                        date_order :{columnWidth: 26, halign:'left'},
+                        partner :{columnWidth: 25, halign:'left' },
+                        product_name :{columnWidth: 65, halign:'left' },
+                        qty :{halign:'right',columnWidth: 9},
+                        price_unit : {halign:'right',columnWidth: 15},
+                        standard_price : {halign:'right',columnWidth: 18},
+                        price_tot : {halign:'right' ,columnWidth: 20},
+                        standar_tot : {halign:'right' ,columnWidth: 20},
+                        utility : {halign:'right',columnWidth: 19}
                     },
                 margin: { top: 16, horizontal: 7},
                 addPageContent: function (data) {

+ 20 - 44
static/src/js/reports/report_vouchers.js

@@ -222,13 +222,12 @@ function report_vouchers (reporting){
                     journal: item.journal_id[1],
                     date_voucher: moment(item.date).format("DD/MM/YYYY"),
                     partner: item.partner_id[1],
-                    amount_in: accounting.formatNumber(amount_in,2,".",","),
-                    amount_out: accounting.formatNumber(amount_out,2,".",","),
+                    amount_in: accounting.formatNumber(amount_in,0,".",","),
+                    amount_out: accounting.formatNumber(amount_out,0,".",","),
                     type: item.type,
                     date: item.date,
                     journal_id: item.journal_id[0],
                     partner_id: item.partner_id[0],
-                    invoice_id: invoice.id,
                     in_amount:amount_in,
                     out_amount:amount_out
                 });
@@ -238,7 +237,10 @@ function report_vouchers (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 journal = this.$el.find('#current-journal').val();
             var desde = this.$el.find('#from').val();
             var hasta = this.$el.find('#to').val();
@@ -246,51 +248,25 @@ function report_vouchers (reporting){
             var content = self.content;
             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")){
                 $('#datepicker').css('display','block');
                 if (desde.length > 0){
@@ -373,8 +349,8 @@ function report_vouchers (reporting){
             if (rows.length > 0){
                 rows.push({
                     reference: "Totales ",
-                    amount_in: accounting.formatNumber(total_in,2,".",","),
-                    amount_out: accounting.formatNumber(total_out,2,".",","),
+                    amount_in: accounting.formatNumber(total_in,0,".",","),
+                    amount_out: accounting.formatNumber(total_out,0,".",","),
                 });
             }
             return rows;
@@ -417,13 +393,13 @@ function report_vouchers (reporting){
             pdfDoc.autoTable(getColumns, rows, {
                 styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
                 columnStyles: {
-                    reference : {columnWidth: '10px'},
-                    number : {columnWidth: '7px'},
-                    journal_id : {columnWidth: '6px'},
-                    date_voucher : {columnWidth: '6px'},
-                    partner : {columnWidth: '8px'},
-                    amount_in : {halign:'right',columnWidth: '8px'},
-                    amount_out: {halign:'right',columnWidth: '8px'}
+                    reference : {columnWidth: 31},
+                    number : {columnWidth: 28},
+                    journal_id : {columnWidth: 18},
+                    date_voucher : {columnWidth: 18},
+                    partner : {columnWidth: 40},
+                    amount_in : {halign:'right',columnWidth: 19},
+                    amount_out: {halign:'right',columnWidth: 21}
                 },
                 margin: { top: 16, horizontal: 7},
 

+ 4 - 6
static/src/reports/report_libro_pos.xml

@@ -3,7 +3,7 @@
     <t t-name="ReportLibroPos">
         <div class="report_view">
             <div class="reporting_page_header">
-                <h1>Libro de Venta</h1>
+                <h1>Libro 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>
@@ -92,16 +92,14 @@
                     <tr>
                         <th data-field="number" data-sortable="true">N°Factura</th>
                         <th data-field="date_invoice" data-sortable="true">Fecha</th>
+                        <th data-field="partner" data-sortable="true">Razón Social</th>
                         <th data-field="ruc" data-sortable="true">CIN/RUC</th>
-                        <th data-field="partner" data-sortable="true">Cliente</th>
-                        <th data-field="journal_name">Forma Pago</th>
                         <th data-field="amount_untaxed" data-sortable="true" data-align="right">Gravadas</th>
                         <th data-field="amount_tax" data-sortable="true" data-align="right">Impuesto</th>
                         <th data-field="amount_exentas" data-sortable="true" data-align="right">Exentas</th>
                         <th data-field="amount_total" data-sortable="true" data-align="right">Total</th>
-                        <th data-field="ref_iva" data-sortable="true" data-align="right">Ref. Iva</th>
-                        <th data-field="ref_renta" data-sortable="true" data-align="right">Ref. Renta</th>
-                        <th data-field="user" data-sortable="true">Vendedor</th>
+                        <th data-field="ref_iva" data-sortable="true" data-align="right">Ret. Iva</th>
+                        <th data-field="ref_renta" data-sortable="true" data-align="right">Ret. Renta</th>
                     </tr>
                 </thead>
             </table>

+ 4 - 6
static/src/reports/report_libro_venta.xml

@@ -3,7 +3,7 @@
     <t t-name="ReportLibroVenta">
         <div class="report_view">
             <div class="reporting_page_header">
-                <h1>Libro de Venta</h1>
+                <h1>Libro 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>
@@ -92,16 +92,14 @@
                     <tr>
                         <th data-field="number" data-sortable="true">N°Factura</th>
                         <th data-field="date_invoice" data-sortable="true">Fecha</th>
+                        <th data-field="partner" data-sortable="true">Razón Social</th>
                         <th data-field="ruc" data-sortable="true">CIN/RUC</th>
-                        <th data-field="partner" data-sortable="true">Cliente</th>
-                        <th data-field="journal_name">Forma Pago</th>
                         <th data-field="amount_untaxed" data-sortable="true" data-align="right">Gravadas</th>
                         <th data-field="amount_tax" data-sortable="true" data-align="right">Impuesto</th>
                         <th data-field="amount_exentas" data-sortable="true" data-align="right">Exentas</th>
                         <th data-field="amount_total" data-sortable="true" data-align="right">Total</th>
-                        <th data-field="ref_iva" data-sortable="true">Ref. Iva</th>
-                        <th data-field="ref_renta" data-sortable="true">Ref. Renta</th>
-                        <th data-field="user" data-sortable="true">Vendedor</th>
+                        <th data-field="ref_iva" data-sortable="true">Ret. Iva</th>
+                        <th data-field="ref_renta" data-sortable="true">Ret. Renta</th>
                     </tr>
                 </thead>
             </table>

+ 4 - 6
static/src/reports/report_libro_venta_pos.xml

@@ -3,7 +3,7 @@
     <t t-name="ReportLibroVentaPos">
         <div class="report_view">
             <div class="reporting_page_header">
-                <h1>Libro de Venta</h1>
+                <h1>Libro 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>
@@ -93,16 +93,14 @@
                         <th data-field="number" data-sortable="true">N°Factura</th>
                         <th data-field="ref" data-sortable="true">Ref.</th>
                         <th data-field="date_invoice" data-sortable="true">Fecha</th>
+                        <th data-field="partner" data-sortable="true">Razón Social</th>
                         <th data-field="ruc" data-sortable="true">CIN/RUC</th>
-                        <th data-field="partner" data-sortable="true">Cliente</th>
-                        <th data-field="journal_name">Forma Pago</th>
                         <th data-field="amount_untaxed" data-sortable="true" data-align="right">Gravadas</th>
                         <th data-field="amount_tax" data-sortable="true" data-align="right">Impuesto</th>
                         <th data-field="amount_exentas" data-sortable="true" data-align="right">Exentas</th>
                         <th data-field="amount_total" data-sortable="true" data-align="right">Total</th>
-                        <th data-field="ref_iva" data-sortable="true" data-align="right">Ref. Iva</th>
-                        <th data-field="ref_renta" data-sortable="true" data-align="right">Ref. Renta</th>
-                        <th data-field="user" data-sortable="true">Vendedor</th>
+                        <th data-field="ref_iva" data-sortable="true" data-align="right">Ret. Iva</th>
+                        <th data-field="ref_renta" data-sortable="true" data-align="right">Ret. Renta</th>
                     </tr>
                 </thead>
             </table>

+ 173 - 0
static/src/reports/report_libro_ventapos_dental.xml

@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="ReportLibroVentaPosDental">
+        <div class="report_view">
+            <div class="reporting_page_header">
+                <h1>Libro 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="current-warehouse">Vendedor: </label>
+                                    <select id="current-warehouse" class="form-control ui-autocomplete-input" name="warehouse"></select>
+                                </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-journal">Formas de Pago: </label>
+                                    <select id="current-journal" class="form-control ui-autocomplete-input" name="journal"></select>
+                                </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"
+                data-pagination="true"
+                data-toggle="table"
+                data-toolbar="#toolbar"
+                data-show-columns="true"
+                data-height="auto"
+                data-classes="table table-hover table-condensed  table-no-bordered"
+                data-row-style="rowStyle"
+                data-search="true"
+                data-show-export="true"
+                data-show-toggle="true"
+                data-pagination-detail-h-align="left"
+                data-show-footer="true"
+                data-footer-style="footerStyle"
+                data-buttons-class="oe_button oe_form_button oe_highlight"
+                data-show-pagination-switch="true"
+                data-page-size="10"
+                data-search-on-enter-key="true"
+                data-undefined-text=" "
+                >
+                <thead style="background:none;">
+                    <tr>
+                        <th data-field="number" data-align="center" data-footer-formatter="Totales" data-sortable="true">N°Factura</th>
+                        <th data-field="ref" data-sortable="true">Ref.</th>
+                        <th data-field="date_invoice" data-sortable="true">Fecha</th>
+                        <th data-field="partner" data-sortable="true">Cliente</th>
+                        <th data-field="ruc" data-sortable="true">CIN/RUC</th>
+                        <th data-field="amount_untaxed" data-sortable="true" data-footer-formatter="totalGravadasFormatter" data-align="right">Gravadas</th>
+                        <th data-field="amount_tax" data-sortable="true" data-footer-formatter="totalTaxFormatter" data-align="right">Impuesto</th>
+                        <th data-field="amount_exentas" data-sortable="true" data-footer-formatter="totalExentasFormatter" data-align="right">Exentas</th>
+                        <th data-field="amount_total" data-sortable="true" data-footer-formatter="totalFormatter" data-align="right">Total</th>
+                        <th data-field="ref_iva" data-sortable="true" data-align="right">Ret. Iva</th>
+                        <th data-field="ref_renta" data-sortable="true" data-align="right">Ret. Renta</th>
+                    </tr>
+                </thead>
+            </table>
+            <script>
+
+                <!--
+                    UNTAXED TOTAL
+                -->
+                function totalGravadasFormatter(rowsTable) {
+                    var total =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.untaxed);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(total,0,'.',',');
+                }
+                <!--
+                    TAXED TOTAL
+                -->
+                function totalTaxFormatter(rowsTable) {
+                    var total =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.tax);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(total,0,'.',',');
+                }
+                <!--
+                    EXENTAS TOTAL
+                -->
+                function totalExentasFormatter(rowsTable) {
+                    var total =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.exentas);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(total,0,'.',',');
+                }
+                <!--
+                    TOTAL
+                -->
+                function totalFormatter(rowsTable) {
+                    var total =  _.reduce(_.map(rowsTable,function(item){
+                        return (item.amount);
+                    }), function(memo, num){
+                    return memo + num; },0)
+                    return accounting.formatNumber(total,0,'.',',');
+                }
+                <!--
+                    FOOTER STYLE
+                -->
+                function footerStyle(row, index) {
+                    return {
+                        css: {
+                          "font-weight": "bold"
+                        }
+                    };
+                };
+            </script>
+        </div>
+    </t>
+</template>

+ 1 - 1
static/src/reports/report_ventas_pos_orders.xml

@@ -103,7 +103,7 @@
             <thead>
               <tr>
                 <th data-field="order_name" data-sortable="true">Pos</th>
-                <th data-field="ref" data-sortable="true">Venta</th>
+                <th data-field="invoice_name" 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="partner" data-sortable="true">Cliente</th>

+ 4 - 4
static/src/reports/report_vouchers.xml

@@ -100,10 +100,10 @@
                 <thead>
                     <tr>
                         <th data-field="reference" data-sortable="true">Factura</th>
-                        <th data-field="number">Nro. de pago</th>
-                        <th data-field="journal">Metodo de pago</th>
-                        <th data-field="date_voucher">Fecha</th>
-                        <th data-field="partner">Cliente/Proveedor</th>
+                        <th data-field="number" data-sortable="true">Nro. de pago</th>
+                        <th data-field="journal" data-sortable="true">Metodo de pago</th>
+                        <th data-field="date_voucher" data-sortable="true">Fecha</th>
+                        <th data-field="partner" data-sortable="true">Cliente/Proveedor</th>
                         <th data-field="amount_in" data-sortable="true" data-align="right">Pagos de clientes</th>
                         <th data-field="amount_out" data-sortable="true" data-align="right">Pagos a proveedores</th>
                     </tr>

+ 5 - 6
templates.xml

@@ -39,9 +39,6 @@
                 <!-- Analisis de ventas -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_sales_invoice_analysis.js" />
 
-                <!-- Historico de medical -->
-                <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_medical.js" />
-
                 <!-- Historico de utilidad sobre precio de venta -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_invoice_difventa.js" />
 
@@ -81,9 +78,11 @@
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_crm.js"/>
                 <!-- crm_task -->
                 <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_crmtask.js"/>
-                  <!-- crm_mensaje -->
-                  <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_mensajecrm.js"/>
-                  <!-- project -->
+                 <!-- crm_mensaje -->
+                <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_mensajecrm.js"/>
+                <!-- Historico de medical -->
+                <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_medical.js" />
+                <!-- project -->
                   <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_project.js"/>
                   <!-- <script type="text/javascript" src="/eiru_reporting/static/src/js/reports/report_balance.js"/> -->
                  <!-- account -->