|
@@ -23,6 +23,9 @@ function report_sales_invoice_analysis (reporting){
|
|
|
'click #D' : 'fectSearch',
|
|
|
'click #Z' : 'fectSearch',
|
|
|
'change #current-store': 'fectSearch',
|
|
|
+ 'change #current-journal': 'fectSearch',
|
|
|
+ 'change #current-category' : 'fectSearch',
|
|
|
+ 'change #user': 'fectSearch',
|
|
|
'change #from' : 'fectSearch',
|
|
|
'change #to': 'fectSearch',
|
|
|
'click #volver_btn': 'volver',
|
|
@@ -121,13 +124,17 @@ function report_sales_invoice_analysis (reporting){
|
|
|
return self.fecthResStore();
|
|
|
}).then(function(ResStore){
|
|
|
self.ResStore = ResStore;
|
|
|
- self.$el.find('#current-store').append('<option value="9999999">Todas las SUC.</option>');
|
|
|
+ self.$el.find('#current-store').append('<option value="9999999">Todas las Sucursales</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;
|
|
@@ -137,14 +144,25 @@ function report_sales_invoice_analysis (reporting){
|
|
|
return self.fecthProduct(invoiceLines);
|
|
|
}).then(function(ProductProduct){
|
|
|
self.ProductProduct = ProductProduct;
|
|
|
+ return self.fecthCategory();
|
|
|
+ }).then(function(productCategory){
|
|
|
+ self.productCategory = productCategory;
|
|
|
+ self.$el.find('#current-category').append('<option value="9999999">Todas las categorias</option>');
|
|
|
+ _.each(productCategory, function (item) {
|
|
|
+ self.$el.find('#current-category').append('<option value="' + item.id + '">' + item.name + '</option>');
|
|
|
+ });
|
|
|
return self.fecthCompanyCurrency();
|
|
|
}).then(function(resCompany){
|
|
|
self.resCompany = resCompany;
|
|
|
return self.fetchResPartner();
|
|
|
}).then(function(ResPartner){
|
|
|
self.ResPartner = ResPartner;
|
|
|
+ return self.fecthResUser();
|
|
|
+ }).then(function (ResUser) {
|
|
|
+ self.ResUser = ResUser;
|
|
|
self.search();
|
|
|
self.searchProduct();
|
|
|
+ self.searchUser();
|
|
|
return self.invoice_Currency();
|
|
|
});
|
|
|
},
|
|
@@ -267,7 +285,7 @@ function report_sales_invoice_analysis (reporting){
|
|
|
filter=filter.concat(",['journal_id', 'in',["+journal_ids+"]]");
|
|
|
}
|
|
|
filter=filter.concat("]");
|
|
|
- var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'invoice_line','date_invoice','partner_id'];
|
|
|
+ var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'invoice_line','date_invoice','partner_id' ,'user_id'];
|
|
|
var defer = $.Deferred();
|
|
|
var Invoice = new model.web.Model('account.invoice');
|
|
|
Invoice.query(field).filter(filter).all().then(function (results) {
|
|
@@ -299,6 +317,48 @@ function report_sales_invoice_analysis (reporting){
|
|
|
return defer;
|
|
|
},
|
|
|
|
|
|
+ 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 model.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.fectSearch();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ close: function( event, ui ) {
|
|
|
+ self.fectSearch();
|
|
|
+ },
|
|
|
+ select: function(event, ui) {
|
|
|
+ self.fectSearch();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
|
|
|
fecthProduct: function(invoiceLines){
|
|
|
var defer = $.Deferred();
|
|
@@ -306,13 +366,24 @@ function report_sales_invoice_analysis (reporting){
|
|
|
return item.product_id[0];
|
|
|
}));
|
|
|
var ProductProduct = new model.web.Model('product.product');
|
|
|
- var fields = ['id','name', 'default_code', 'name_template','ean13', 'standard_price','type','attribute_str'];
|
|
|
+ var fields = ['id','name', 'default_code', 'name_template','ean13', 'standard_price','type', 'categ_id','attribute_str'];
|
|
|
ProductProduct.query(fields).filter([['id', 'in', porductIDS]]).all().then(function (results) {
|
|
|
defer.resolve(results)
|
|
|
});
|
|
|
return defer;
|
|
|
},
|
|
|
|
|
|
+
|
|
|
+ fecthCategory: function () {
|
|
|
+ var self = this;
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var productCategory = new model.web.Model('product.category');
|
|
|
+ productCategory.query(['id', 'name', 'type']).filter([['type', '=', 'normal']]).all().then(function (results) {
|
|
|
+ defer.resolve(results);
|
|
|
+ });
|
|
|
+ return defer;
|
|
|
+ },
|
|
|
+
|
|
|
|
|
|
getCurrency: function (id){
|
|
|
return _.find(this.Currency,function (curr) {
|
|
@@ -364,41 +435,50 @@ function report_sales_invoice_analysis (reporting){
|
|
|
var item;
|
|
|
var invoice;
|
|
|
var producto;
|
|
|
+ var attribute;
|
|
|
|
|
|
for (var i = 0; i < this.invoiceLines.length; i++) {
|
|
|
item = this.invoiceLines[i];
|
|
|
invoice = this.getInvoice(item.id);
|
|
|
producto =this.getProduct(item.product_id);
|
|
|
|
|
|
- if (!producto){
|
|
|
- producto={};
|
|
|
- producto.standard_price=0;
|
|
|
- }
|
|
|
- var store_id = self.getAccountJournal(invoice.journal_id[0]);
|
|
|
- if(store_id.length > 0){
|
|
|
- data.push({
|
|
|
- id : invoice.id,
|
|
|
- number : (invoice.number),
|
|
|
- id_product : producto.id,
|
|
|
- name : (item.name),
|
|
|
- quantity : accounting.formatNumber((item.quantity),0, ".", ","),
|
|
|
- price_unity : accounting.formatNumber((item.price_unit / invoice.rate),2, ".", ","),
|
|
|
- standar_price : accounting.formatNumber((producto.standard_price),2, ".", ","),
|
|
|
- price_tot : accounting.formatNumber((item.quantity * (item.price_unit / invoice.rate)),2, ".", ","),
|
|
|
- standar_tot : accounting.formatNumber((item.quantity * producto.standard_price),2, ".", ","),
|
|
|
- utility : accounting.formatNumber(((item.quantity * (item.price_unit / invoice.rate)) - (item.quantity * producto.standard_price)),2, ".", ","),
|
|
|
- journal_id :(invoice.journal_id[0]),
|
|
|
- journal_name :(invoice.journal_id[1]),
|
|
|
- quantity_tot : (item.quantity),
|
|
|
- price_tot_tot : ((item.quantity * (item.price_unit / invoice.rate))),
|
|
|
- standar_tot_tot : ((item.quantity * producto.standard_price)),
|
|
|
- utility_tot : (((item.quantity * (item.price_unit / invoice.rate)) - (item.quantity * producto.standard_price))),
|
|
|
- date_create :moment(invoice.date_invoice).format("DD/MM/YYYY"),
|
|
|
- date_invoice : (invoice.date_invoice),
|
|
|
- partner_id : invoice.partner_id[0],
|
|
|
- partner_name : invoice.partner_id[1],
|
|
|
- store_id : store_id[0].store_ids[0],
|
|
|
- });
|
|
|
+ if (producto != undefined){
|
|
|
+ if(producto.attribute_str){
|
|
|
+ attribute = ' ' + self.valorNull(producto.attribute_str);
|
|
|
+ }else{
|
|
|
+ attribute = ' ';
|
|
|
+ }
|
|
|
+ var store_id = self.getAccountJournal(invoice.journal_id[0]);
|
|
|
+ if(store_id.length > 0){
|
|
|
+ data.push({
|
|
|
+ id : invoice.id,
|
|
|
+ number : (invoice.number),
|
|
|
+ id_product : producto.id,
|
|
|
+ ean_product : self.valorNull(producto.ean13),
|
|
|
+ name : (item.name + attribute),
|
|
|
+ quantity : accounting.formatNumber((item.quantity),0, ".", ","),
|
|
|
+ price_unity : accounting.formatNumber((item.price_unit / invoice.rate),0, ".", ","),
|
|
|
+ standar_price : accounting.formatNumber((producto.standard_price),0, ".", ","),
|
|
|
+ price_tot : accounting.formatNumber((item.quantity * (item.price_unit / invoice.rate)),0, ".", ","),
|
|
|
+ standar_tot : accounting.formatNumber((item.quantity * producto.standard_price),0, ".", ","),
|
|
|
+ utility : accounting.formatNumber(((item.quantity * (item.price_unit / invoice.rate)) - (item.quantity * producto.standard_price)),0, ".", ","),
|
|
|
+ journal_id :(invoice.journal_id[0]),
|
|
|
+ journal_name :(invoice.journal_id[1]),
|
|
|
+ quantity_tot : (item.quantity),
|
|
|
+ price_tot_tot : ((item.quantity * (item.price_unit / invoice.rate))),
|
|
|
+ standar_tot_tot : ((item.quantity * producto.standard_price)),
|
|
|
+ utility_tot : (((item.quantity * (item.price_unit / invoice.rate)) - (item.quantity * producto.standard_price))),
|
|
|
+ date_create :moment(invoice.date_invoice).format("DD/MM/YYYY"),
|
|
|
+ date_invoice : (invoice.date_invoice),
|
|
|
+ partner_id : invoice.partner_id[0],
|
|
|
+ partner_name : invoice.partner_id[1],
|
|
|
+ categ_id : (producto.categ_id[0]),
|
|
|
+ categ_name : (producto.categ_id[1]),
|
|
|
+ user_id : self.valorNull(invoice.user_id[0]),
|
|
|
+ user_name : invoice.user_id[1],
|
|
|
+ store_id : store_id[0].store_ids[0],
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -413,10 +493,13 @@ function report_sales_invoice_analysis (reporting){
|
|
|
var month = moment().format('YYYY-MM');
|
|
|
var last_month = moment().add(-1, 'months').format('YYYY-MM');
|
|
|
var partner = this.$el.find('#partner').val().split('-');
|
|
|
+ var user = this.$el.find('#user').val().split('-');
|
|
|
var product = this.$el.find('#product').val().split('-');
|
|
|
+ var categ = this.$el.find('#current-category').val().split('-');
|
|
|
var desde =this.$el.find('#from').val();
|
|
|
var hasta =this.$el.find('#to').val();
|
|
|
var store = this.$el.find('#current-store').val();
|
|
|
+ var journal = this.$el.find('#current-journal').val();
|
|
|
var content = self.content;
|
|
|
|
|
|
if ($('#A').is(":checked")){
|
|
@@ -474,6 +557,24 @@ function report_sales_invoice_analysis (reporting){
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ if(journal != 9999999){
|
|
|
+ content =_.filter(content, function (inv){
|
|
|
+ return inv.journal_id == journal;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (user != ""){
|
|
|
+ content = _.filter(content, function(inv){
|
|
|
+ return inv.user_id == user[0];
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (categ != 9999999){
|
|
|
+ content =_.filter(content, function (inv){
|
|
|
+ return inv.categ_id == categ[0];
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
var quantity_tot_total = _.reduce(_.map(content,function(map){
|
|
|
return(map.quantity_tot);
|
|
|
}),function(memo, num){
|
|
@@ -594,17 +695,22 @@ function report_sales_invoice_analysis (reporting){
|
|
|
|
|
|
|
|
|
pdfDoc.autoTable(getColumns, rows, {
|
|
|
- styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
|
|
|
+ styles: { overflow: 'linebreak', fontSize: 7, columnWidth: 'wrap'},
|
|
|
columnStyles: {
|
|
|
number: {columnWidth: '13px'},
|
|
|
- date_create :{columnWidth: '13px'},
|
|
|
- name :{columnWidth: '8px'},
|
|
|
- quantity :{halign:'right',columnWidth: '5px'},
|
|
|
- price_unity : {halign:'right',columnWidth: '16px'},
|
|
|
- standar_price : {halign:'right',columnWidth: '8px'},
|
|
|
- price_tot : {halign:'right' ,columnWidth: '16px'},
|
|
|
- standar_tot : {halign:'right' ,columnWidth: '11px'},
|
|
|
- utility : {halign:'right',columnWidth: '9px'},
|
|
|
+ date_create :{columnWidth: '30px'},
|
|
|
+ partner_name:{columnWidth: '8px'},
|
|
|
+ journal_name:{columnWidth: '8px'},
|
|
|
+ ean_product:{columnWidth: '7px'},
|
|
|
+ name :{columnWidth: '6px'},
|
|
|
+ categ_name : {columnWidth: '3px'},
|
|
|
+ quantity :{halign:'right',columnWidth: '9px'},
|
|
|
+ price_unity : {halign:'right',columnWidth: '20px'},
|
|
|
+ standar_price : {halign:'right',columnWidth: '14px'},
|
|
|
+ price_tot : {halign:'right' ,columnWidth: '20px'},
|
|
|
+ standar_tot : {halign:'right' ,columnWidth: '15px'},
|
|
|
+ utility : {halign:'right',columnWidth: '18px'},
|
|
|
+ user_name : {columnWidth: '3px'},
|
|
|
},
|
|
|
margin: { top: 16, horizontal: 7},
|
|
|
addPageContent: function (data) {
|