// ERPNext - web based ERP (http://erpnext.com) // Copyright (C) 2012 Web Notes Technologies Pvt Ltd // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . report.customize_filters = function() { this.hide_all_filters(); // hide transaction based on permissions var all_transactions = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]; var transaction_list = []; $.each(all_transactions, function(i, dt) { if(wn.boot.profile.can_read.indexOf(dt)!=-1) { transaction_list.push(dt); } }); this.add_filter({fieldname:'transaction', label:'Transaction', fieldtype:'Select', options:transaction_list.join(NEWLINE),report_default:'Delivery Note',ignore : 1,parent:'Profile',in_first_page : 1,single_select : 1}); this.add_filter({fieldname:'period', label:'Period', fieldtype:'Select', options:'Monthly'+NEWLINE+'Quarterly'+NEWLINE+'Half Yearly'+NEWLINE+'Annual',report_default:'Quarterly',ignore : 1, parent:'Profile',in_first_page:1,single_select:1}); this.add_filter({fieldname:'based_on', label:'Based On', fieldtype:'Select', options:'Item'+NEWLINE+'Item Group'+NEWLINE+'Customer'+NEWLINE+'Customer Group'+NEWLINE+'Territory'+NEWLINE+'Supplier'+NEWLINE+'Supplier Type'+NEWLINE+'Project', ignore : 1, parent:'Profile', report_default:'Item', in_first_page : 1,single_select:1}); this.add_filter({fieldname:'group_by', label:'Group By', fieldtype:'Select', options:NEWLINE+'Item'+NEWLINE+'Customer'+NEWLINE+'Supplier', ignore : 1, parent:'Profile',single_select:1}); this.add_filter({fieldname:'order_type', label:'Order Type', fieldtype:'Select', options:NEWLINE+'Sales'+NEWLINE+'Maintenance',ignore : 1, parent:'Profile',single_select:1}); this.add_filter({fieldname:'company', label:'Company', fieldtype:'Link', options:'Company', report_default:sys_defaults.company, ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'fiscal_year', label:'Fiscal Year', fieldtype:'Link', options:'Fiscal Year', report_default:sys_defaults.fiscal_year, ignore : 1, parent:'Profile', in_first_page:1}); // Add Filters this.add_filter({fieldname:'item', label:'Item', fieldtype:'Link', options:'Item', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'item_group', label:'Item Group', fieldtype:'Link', options:'Item Group', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'customer', label:'Customer', fieldtype:'Link', options:'Customer', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'customer_group', label:'Customer Group', fieldtype:'Link', options:'Customer Group', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'territory', label:'Territory', fieldtype:'Link', options:'Territory', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'supplier', label:'Supplier', fieldtype:'Link', options:'Supplier', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'supplier_type', label:'Supplier Type', fieldtype:'Link', options:'Supplier Type', ignore : 1, parent:'Profile'}); this.add_filter({fieldname:'project', label:'Project', fieldtype:'Link', options:'Project', ignore : 1, parent:'Profile'}); } this.mytabs.tabs['Select Columns'].hide(); report.aftertableprint = function(t) { $yt(t,'*',1,{whiteSpace:'pre'}); } var validate_values = function(trans,based_on,order_type) { if(!fiscal_year){ msgprint("Please select Fiscal Year"); return 0; } if((in_list(['Quotation','Sales Order','Delivery Note','Sales Invoice'],trans) && in_list(['Supplier','Supplier Type'],based_on)) || (in_list(['Purchase Order','Purchase Receipt','Purchase Invoice'],trans) && in_list(['Customer','Customer Group','Territory'],based_on))){ msgprint("Sorry! You cannot fetch "+trans+" trend based on "+based_on); return 0; } if(in_list(['Purchase Order','Purchase Receipt','Purchase Invoice'],trans) && order_type){ msgprint("Please deselect Order Type for "+trans); return 0; } return 1; } report.get_query = function() { trans = this.get_filter('Profile', 'Transaction').get_value(); order_type = this.get_filter('Profile', 'Order Type').get_value(); based_on = this.get_filter('Profile', 'Based On').get_value(); company = this.get_filter('Profile', 'Company').get_value(); fiscal_year = this.get_filter('Profile', 'Fiscal Year').get_value(); if(validate_values(trans,based_on,order_type)){ col = ''; add_cond = ''; add_col = ''; add_tables = ''; sp_cond = ''; trans_det = trans+' Item' if(order_type != '') add_code += ' AND t1.order_type = '+order_type; switch(based_on){ case 'Item' : item = this.get_filter('Profile', 'Item').get_value(); col = 'DISTINCT t2.item_code, t3.item_name'; add_tables = ',tabItem t3'; add_cond += ' AND t2.item_code = t3.name'; if(item) add_cond += ' AND t2.item_code = "'+item+'"'; break; case 'Customer' : cust = this.get_filter('Profile', 'Customer').get_value(); col = 'DISTINCT t1.customer, t3.territory'; add_tables = ',tabCustomer t3'; add_cond += ' AND t1.customer = t3.name'; if(cust) add_cond += ' AND t1.customer = "'+cust+'"'; break; case 'Supplier' : supp = this.get_filter('Profile', 'Supplier').get_value(); col = 'DISTINCT t1.supplier, t3.supplier_type'; add_tables = ',tabSupplier t3'; add_cond += ' AND t1.supplier = t3.name'; if(supp) add_cond += ' AND t1.supplier = "'+supp+'"'; break; case 'Supplier Type' : supp_type = this.get_filter('Profile', 'Supplier Type').get_value(); col = 'DISTINCT t3.supplier_type'; add_tables = ',tabSupplier t3'; add_cond += ' AND t1.supplier = t3.name'; if(supp_type) add_cond += ' AND t1.supplier_type = "'+supp_type+'"'; break; case 'Project' : pro = this.get_filter('Profile', 'Project').get_value(); if (inList(['Purchase Order', 'Purchase Receipt', 'Purchase Invoice'], trans)) { col = 'DISTINCT t2.project_name'; if(pro) add_cond += ' AND t2.project_name = "'+pro+'"'; } else { col = 'DISTINCT t1.project_name'; if(pro) add_cond += ' AND t1.project_name = "'+pro+'"'; } break; case 'Item Group' : ig = this.get_filter('Profile', 'Item Group').get_value(); if(ig) sp_cond += ' AND parent.name = "'+ig+'"'; break; case 'Customer Group' : cg = this.get_filter('Profile', 'Customer Group').get_value(); if(cg) sp_cond += ' AND parent.name = "'+cg+'"'; break; case 'Territory' : ter = this.get_filter('Profile', 'Territory').get_value(); if(ter) sp_cond += ' AND parent.name = "'+ter+'"'; break; } if(based_on == 'Item' || based_on == 'Customer' || based_on == 'Supplier' || based_on == 'Supplier Type' || based_on == 'Project') var q ='SELECT '+col+' FROM `tab'+trans+'` t1, `tab'+trans_det+'` t2 '+add_tables+' WHERE t1.fiscal_year = "'+fiscal_year+'" and t1.company = "'+company+'" and t2.parent = t1.name '+add_cond; else var q = 'SELECT CONCAT(REPEAT(" ", COUNT(parent.name) - 1), node.name) AS "Name" FROM `tab'+based_on+'` node,`tab'+based_on+'` parent WHERE node.lft BETWEEN parent.lft and parent.rgt and node.docstatus !=2 '+sp_cond+' GROUP BY node.name ORDER BY node.lft'; return q; } }