diff --git a/accounts/search_criteria/trend_analyzer/trend_analyzer.py b/accounts/search_criteria/trend_analyzer/trend_analyzer.py
index 87e1e8e..9bdde39 100644
--- a/accounts/search_criteria/trend_analyzer/trend_analyzer.py
+++ b/accounts/search_criteria/trend_analyzer/trend_analyzer.py
@@ -155,10 +155,8 @@
 		for d in range(len(colnames) - cr):
 			r.append(flt(main_det[0][d]))
 		out.append(r)
-		
 		if group_by:
 			flag = 1
-			# check for root nodes
 			if based_on in ['Item Group','Customer Group','Territory']:
 				is_grp = sql("select is_group from `tab%s` where name = '%s'" % (based_on, cstr(r[col_idx[based_on]]).strip()))
 				is_grp = is_grp and cstr(is_grp[0][0]) or ''
@@ -167,11 +165,11 @@
 
 			if flag == 1:	
 				det = [x[0] for x in sql("SELECT DISTINCT %s FROM %s where %s" % (sel_col, add_tab, add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))]
-
 				for des in range(len(det)):
 					t_row = ['' for i in range(len(colnames))]
 					t_row[col_idx[group_by]] = cstr(det[des])
 					gr_det = sql("SELECT %s FROM %s WHERE %s = '%s' and %s" % (query_val, add_tab, sel_col, cstr(det[des]), add_cond % {'value':cstr(r[col_idx[based_on]]).strip()}))
+					webnotes.errprint(cstr(r[col_idx[based_on]]).strip())
 					for d in range(len(col_names)):
 						t_row[col_idx[col_names[d]]] = flt(gr_det[0][d])
-					out.append(t_row)
+					out.append(t_row)
\ No newline at end of file
diff --git a/selling/report/quotation_trends/quotation_trends.js b/selling/report/quotation_trends/quotation_trends.js
index e55e252..e166fa6 100644
--- a/selling/report/quotation_trends/quotation_trends.js
+++ b/selling/report/quotation_trends/quotation_trends.js
@@ -19,21 +19,21 @@
 			"label": "Group By",
 			"fieldtype": "Select",
 			"options": "Item"+NEWLINE+"Customer",
-			"default": "Customer"
+			"default": ""
 		},
 		{
 			"fieldname":"fiscal_year",
 			"label": "Fiscal Year",
 			"fieldtype": "Link",
 			"options":'Fiscal Year',
-			"default": "Fiscal Year"
+			"default": sys_defaults.fiscal_year
 		},
 		{
 			"fieldname":"company",
 			"label": "Company",
 			"fieldtype": "Link",
 			"options": "Company",
-			"default": "Company"
+			"default": sys_defaults.company
 		},
 		
 	]
diff --git a/selling/report/quotation_trends/quotation_trends.py b/selling/report/quotation_trends/quotation_trends.py
index 5b9fc04..6a81d97 100644
--- a/selling/report/quotation_trends/quotation_trends.py
+++ b/selling/report/quotation_trends/quotation_trends.py
@@ -16,78 +16,154 @@
 
 from __future__ import unicode_literals
 import webnotes
-from webnotes.utils import getdate, cint
+from webnotes.utils import cint, add_days, add_months, cstr
 
 def execute(filters=None):
 	if not filters: filters ={}
-	
-	period = filters.get("period")
-	based_on = filters.get("based_on")
-	group_by = filters.get("group_by")
 
-	columns = get_columns(filters, period, based_on, group_by)
-	data = [] 
+	# Global data
+	ysd = webnotes.conn.sql("select year_start_date from `tabFiscal Year` where name = '%s'"%filters.get("fiscal_year"))[0][0]
+	year_start_date = ysd.strftime('%Y-%m-%d')
+	start_month = cint(year_start_date.split('-')[1])
+
+	columns, query_bon, query_pwc, group_by = get_columns(filters, year_start_date, start_month)
+
+	ptab = "tabQuotation"
+	ctab = "tabQuotation Item"
+	data = get_data(filters, ptab, ctab, query_bon, query_pwc, group_by)
 
 	return columns, data 
 
-def get_columns(filters, period, based_on, group_by):
-	columns = []
-	pwc = []
-	bon = []
-	gby = []
+def get_columns(filters, year_start_date, start_month):
+	columns, pwc, bon, gby = [], [], [], []
+	query_bon, query_pwc = '', ''
+
+	period = filters.get("period")
+	based_on = filters.get("based_on")
+	grby = filters.get("group_by")
 
 	if not (period and based_on):
-		webnotes.msgprint("Value missing in 'Period' or 'Based On'",raise_exception=1)
-	elif based_on == group_by:
-		webnotes.msgprint("Plese select different values in 'Based On' and 'Group By'")
+		webnotes.msgprint("Value missing in 'Period' or 'Based On'", raise_exception=1)
+	elif based_on == grby:
+		webnotes.msgprint("Plese select different values in 'Based On' and 'Group By'", raise_exception=1)
 	else: 
-		pwc = period_wise_column(filters, period, pwc)
-		bon = base_wise_column(based_on, bon)
-		gby = gruoup_wise_column(group_by)
+		bon,query_bon,group_by = base_wise_column(based_on, bon)
+		pwc,query_pwc = period_wise_column_and_query(filters, period, pwc, year_start_date,start_month)
+		gby = gruoup_wise_column(grby)
 	
 	if gby:	
-		columns = bon + gby + pwc
+		columns = bon + gby + pwc +["TOTAL(Qty):Float:120", "TOTAL(Amt):Currency:120"] 
 	else:
-		columns = bon + pwc
-	return columns
+		columns = bon + pwc + ["TOTAL(Qty):Float:120", "TOTAL(Amt):Currency:120"]
 
+	return columns, query_bon, query_pwc, group_by
 
-def period_wise_column(filters, period, pwc):
+def get_data(filters, ptab, ctab,  query_bon, query_pwc, group_by):
+	query_details =  query_bon + query_pwc + 'SUM(t2.qty), SUM(t1.grand_total) '
+	query_pwc = query_pwc + 'SUM(t2.qty), SUM(t1.grand_total)'
+	if not filters.get("group_by"):
+		data = webnotes.conn.sql(""" select %s from `%s` t1, `%s` t2 
+			where t2.parent = t1.name and t1.company = '%s' and t1.fiscal_year = '%s' and t1.docstatus = 1 
+			group by %s	
+		"""%(query_details, ptab, ctab, filters.get("company"), filters.get("fiscal_year"), group_by), as_list=1)
+
+	# No coma is included between %s and t2.item_code cause it's already bounded with query_bon
+	if filters.get("group_by") == 'Item':
+		data = webnotes.conn.sql(""" select %s  t2.item_code, %s from `%s` t1, `%s` t2 
+			where t2.parent = t1.name and t1.company = '%s' and t1.fiscal_year = '%s' and t1.docstatus = 1 
+			group by %s, %s"""%( query_bon, query_pwc, ptab, ctab, filters.get("company"), filters.get("fiscal_year"), 
+			group_by,'t2.item_code'), as_list=1)
+
+	if filters.get("group_by") == 'Customer':
+		data = webnotes.conn.sql(""" select %s  t1.customer_name, %s from `%s` t1, `%s` t2 
+			where t2.parent = t1.name and t1.company = '%s' and t1.fiscal_year = '%s' and t1.docstatus = 1 
+			group by %s, %s"""%(query_bon, query_pwc, ptab, ctab, filters.get("company"), filters.get("fiscal_year"), group_by, 't1.customer_name'), as_list=1)
+	
+	return data
+
+def period_wise_column_and_query(filters, period, pwc, year_start_date, start_month):
+	query_details = ''
 
 	if period == "Monthly":
 		month_name = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
-		for month in range(0,len(month_name)):
+		for month in range(start_month-1,len(month_name)):
 			pwc.append(month_name[month]+' (Qty):Float:120')
 			pwc.append(month_name[month]+' (Amt):Currency:120')
+			query_details += """Sum(CASE WHEN MONTH(t1.transaction_date)= %(mon_num)s THEN t2.qty ELSE NULL END),
+					SUM(CASE WHEN MONTH(t1.transaction_date)= %(mon_num)s THEN t1.grand_total ELSE NULL END),
+				"""%{"mon_num": cstr(month+1)}
 
+		for month in range(0, start_month-1):
+			pwc.append(month_name[month]+' (Qty):Float:120')
+			pwc.append(month_name[month]+' (Amt):Currency:120')
+			query_details += """Sum(CASE WHEN MONTH(t1.transaction_date)= %(mon_num)s THEN t2.qty ELSE NULL END),
+					SUM(CASE WHEN MONTH(t1.transaction_date)= %(mon_num)s THEN t1.grand_total ELSE NULL END),
+				"""%{"mon_num": cstr(month+1)}
+	
 	elif period == "Quarterly":
 		pwc = ["Q1(qty):Float:120", "Q1(amt):Currency:120", "Q2(qty):Float:120", "Q2(amt):Currency:120", 
-		"Q3(qty):Float:120", "Q3(amt):Currency:120", "Q4(qty):Float:120", "Q4(amt):Currency:120"
-		]
+		"Q3(qty):Float:120", "Q3(amt):Currency:120", "Q4(qty):Float:120", "Q4(amt):Currency:120"]
+
+		first_qsd, second_qsd, third_qsd, fourth_qsd = year_start_date, add_months(year_start_date,3), add_months(year_start_date,6), add_months(year_start_date,9)
+		first_qed, second_qed, third_qed, fourth_qed = add_days(add_months(first_qsd,3),-1), add_days(add_months(second_qsd,3),-1), add_days(add_months(third_qsd,3),-1), add_days(add_months(fourth_qsd,3),-1)
+
+		bet_dates = [[first_qsd,first_qed],[second_qsd,second_qed],[third_qsd,third_qed],[fourth_qsd,fourth_qed]] 
+		for d in bet_dates:
+			query_details += """
+				SUM(CASE WHEN t1.transaction_date BETWEEN '%(sd)s' AND '%(ed)s' THEN t2.qty ELSE NULL END), 
+				SUM(CASE WHEN t1.transaction_date BETWEEN '%(sd)s' AND '%(ed)s' THEN t1.grand_total ELSE NULL END),
+			"""%{"sd": d[0],"ed": d[1]}
 
 	elif period == "Half-yearly":
 		pwc = ["Fisrt Half(qty):Float:120", "Fisrt Half(amt):Currency:120", "Second Half(qty):Float:120",
-		 	"Second Half(amt):Currency:120"
-		]
+		 	"Second Half(amt):Currency:120"]
+
+		first_half_start = year_start_date
+		first_half_end = add_days(add_months(first_half_start,6),-1)
+		second_half_start = add_days(first_half_end,1)
+		second_half_end = add_days(add_months(second_half_start,6),-1)
+
+		query_details = """ SUM(CASE WHEN t1.transaction_date BETWEEN '%(fhs)s' AND '%(fhe)s' THEN t2.qty ELSE NULL END),
+			 SUM(CASE WHEN t1.transaction_date BETWEEN '%(fhs)s' AND '%(fhe)s' THEN t1.grand_total ELSE NULL END), 
+			 SUM(CASE WHEN t1.transaction_date BETWEEN '%(shs)s' AND '%(she)s' THEN t2.qty ELSE NULL END), 
+			 SUM(CASE WHEN t1.transaction_date BETWEEN '%(shs)s' AND '%(she)s' THEN t1.grand_total ELSE NULL END),
+			"""%{"fhs": first_half_start, "fhe": first_half_end,"shs": second_half_start, "she": second_half_end}	 
+	
 	else:
 		pwc = [filters.get("fiscal_year")+"(qty):Float:120", filters.get("fiscal_year")+"(amt):Currency:120"]
+		query_details = " SUM(t2.qty), SUM(t1.grand_total),"
 
-	return pwc
+	return pwc, query_details
 
 def base_wise_column(based_on, bon):
 	if based_on == "Item":
 		bon = ["Item:Link/Item:120", "Item Name:Data:120"]
+		query_details = "t2.item_code, t2.item_name," 
+		group_by = 't2.item_code'
+
 	elif based_on == "Item Group":
 		bon = ["Item Group:Link/Item Group:120"]
+		query_details = "t2.item_group," 
+		group_by = 't2.item_group'
+
 	elif based_on == "Customer":
 		bon = ["Customer:Link/Customer:120", "Territory:Link/Territory:120"]
+		query_details = "t1.customer_name, t1.territory, "
+		group_by = 't1.customer_name'
+
 	elif based_on == "Customer Group":
 		bon = ["Customer Group:Link/Customer Group"]
+		query_details = "t1.customer_group, "
+		group_by = 't1.customer_group'
+
 	elif based_on == "Territory":
 		bon = ["Territory:Link/Territory:120"]
+		query_details = "t1.territory, "
+		group_by = 't1.territory'
+
 	else:
 		bon = ["Project:Link/Project:120"]
-	return bon
+	return bon, query_details, group_by
 
 def gruoup_wise_column(group_by):
 	if group_by:
