Merge pull request #1112 from pdvyas/versioning
Semantic Versioning
diff --git a/selling/page/selling_home/selling_home.js b/selling/page/selling_home/selling_home.js
index d645403..a64ed48 100644
--- a/selling/page/selling_home/selling_home.js
+++ b/selling/page/selling_home/selling_home.js
@@ -164,6 +164,11 @@
"label":wn._("Sales Funnel"),
page: "sales-funnel"
},
+ {
+ "label":wn._("Customer Acquisition and Loyalty"),
+ route: "query-report/Customer Acquisition and Loyalty",
+ doctype: "Customer"
+ },
]
},
{
diff --git a/selling/report/customer_acquisition_and_loyalty/__init__.py b/selling/report/customer_acquisition_and_loyalty/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/selling/report/customer_acquisition_and_loyalty/__init__.py
diff --git a/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js
new file mode 100644
index 0000000..00f935e
--- /dev/null
+++ b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+wn.query_reports["Customer Acquisition and Loyalty"] = {
+ "filters": [
+ {
+ "fieldname":"company",
+ "label": wn._("Company"),
+ "fieldtype": "Link",
+ "options": "Company",
+ "default": wn.defaults.get_user_default("company")
+ },
+ {
+ "fieldname":"from_date",
+ "label": wn._("From Date"),
+ "fieldtype": "Date",
+ "default": wn.defaults.get_user_default("year_start_date")
+ },
+ {
+ "fieldname":"to_date",
+ "label": wn._("To Date"),
+ "fieldtype": "Date",
+ "default": wn.defaults.get_user_default("year_end_date")
+ },
+ ]
+}
\ No newline at end of file
diff --git a/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
new file mode 100644
index 0000000..2b17c85
--- /dev/null
+++ b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
@@ -0,0 +1,65 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes.utils import getdate, cint
+import calendar
+
+def execute(filters=None):
+ # key yyyy-mm
+ new_customers_in = {}
+ repeat_customers_in = {}
+ customers = []
+ company_condition = ""
+
+ if filters.get("company"):
+ company_condition = ' and company=%(company)s'
+
+ for si in webnotes.conn.sql("""select posting_date, customer, grand_total from `tabSales Invoice`
+ where docstatus=1 and posting_date <= %(to_date)s
+ {company_condition} order by posting_date""".format(company_condition=company_condition),
+ filters, as_dict=1):
+
+ key = si.posting_date[:7]
+ if not si.customer in customers:
+ new_customers_in.setdefault(key, [0, 0.0])
+ new_customers_in[key][0] += 1
+ new_customers_in[key][1] += si.grand_total
+ customers.append(si.customer)
+ else:
+ repeat_customers_in.setdefault(key, [0, 0.0])
+ repeat_customers_in[key][0] += 1
+ repeat_customers_in[key][1] += si.grand_total
+
+ # time series
+ from_year, from_month, temp = filters.get("from_date").split("-")
+ to_year, to_month, temp = filters.get("to_date").split("-")
+
+ from_year, from_month, to_year, to_month = \
+ cint(from_year), cint(from_month), cint(to_year), cint(to_month)
+
+ out = []
+ for year in xrange(from_year, to_year+1):
+ for month in xrange(from_month if year==from_year else 1, (to_month+1) if year==to_year else 13):
+ key = "{year}-{month:02d}".format(year=year, month=month)
+
+ new = new_customers_in.get(key, [0,0.0])
+ repeat = repeat_customers_in.get(key, [0,0.0])
+
+ out.append([year, calendar.month_name[month],
+ new[0], repeat[0], new[0] + repeat[0],
+ new[1], repeat[1], new[1] + repeat[1]])
+
+ return [
+ "Year", "Month",
+ "New Customers:Int",
+ "Repeat Customers:Int",
+ "Total:Int",
+ "New Customer Revenue:Currency:150",
+ "Repeat Customer Revenue:Currency:150",
+ "Total Revenue:Currency:150"
+ ], out
+
+
+
\ No newline at end of file
diff --git a/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.txt b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.txt
new file mode 100644
index 0000000..c1f7e94
--- /dev/null
+++ b/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.txt
@@ -0,0 +1,22 @@
+[
+ {
+ "creation": "2013-11-28 14:58:06",
+ "docstatus": 0,
+ "modified": "2013-11-28 15:02:48",
+ "modified_by": "Administrator",
+ "owner": "Administrator"
+ },
+ {
+ "add_total_row": 1,
+ "doctype": "Report",
+ "is_standard": "Yes",
+ "name": "__common__",
+ "ref_doctype": "Customer",
+ "report_name": "Customer Acquisition and Loyalty",
+ "report_type": "Script Report"
+ },
+ {
+ "doctype": "Report",
+ "name": "Customer Acquisition and Loyalty"
+ }
+]
\ No newline at end of file