[website] [partners listing] first cut
diff --git a/config.json b/config.json
index 33e898f..46cd8c9 100644
--- a/config.json
+++ b/config.json
@@ -131,6 +131,10 @@
 			"cart": {
 				"no_cache": true,
 				"template": "app/website/templates/pages/cart.html"
+			},
+			"partners": {
+				"template": "app/website/templates/pages/partners",
+				"args_method": "website.helpers.partner.get_partner_args"
 			}
 		},
 		"generators": {
@@ -149,6 +153,10 @@
 			"Item Group":{
 				"template": "app/website/templates/html/product_group.html",
 				"condition_field": "show_in_website"
+			},
+			"Sales Partner": {
+				"template": "app/website/templates/html/partner_page.html",
+				"condition_field": "show_in_website"
 			}
 		}
 	}
diff --git a/setup/doctype/sales_partner/sales_partner.py b/setup/doctype/sales_partner/sales_partner.py
index 285d3a9..9e14485 100644
--- a/setup/doctype/sales_partner/sales_partner.py
+++ b/setup/doctype/sales_partner/sales_partner.py
@@ -8,44 +8,50 @@
 # 
 # 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
+# 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 <http://www.gnu.org/licenses/>.
+# along with this program.	If not, see <http://www.gnu.org/licenses/>.
 
 from __future__ import unicode_literals
 import webnotes
-
-from webnotes.model import db_exists
-from webnotes.model.bean import copy_doclist
+from webnotes.utils import cint, cstr, filter_strip_join
 
 sql = webnotes.conn.sql
-	
-
 
 class DocType:
-  def __init__(self, doc, doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
+	def __init__(self, doc, doclist=None):
+		self.doc = doc
+		self.doclist = doclist
 
-  def validate(self):
-    import string
-  
-    if not (self.doc.address_line1)  and not (self.doc.address_line2) and not (self.doc.city) and not (self.doc.state) and not (self.doc.country) and not (self.doc.pincode):
-      return "Please enter address"
-      
-    else:
-      address =["address_line1", "address_line2", "city", "state", "country", "pincode"]
-      comp_address=''
-      for d in address:
-        if self.doc.fields[d]:
-          comp_address += self.doc.fields[d] + "\n"
-      self.doc.address = comp_address
-    
-  def get_contacts(self,nm):
-    if nm:
-      contact_details =webnotes.conn.convert_to_lists(sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm))
-      return contact_details
-    else:
-      return ''
\ No newline at end of file
+	def on_update(self):
+		if cint(self.doc.show_in_website):
+			from webnotes.webutils import update_page_name
+			update_page_name(self.doc, self.doc.partner_name)
+		
+		if self.doc.page_name:
+			from webnotes.webutils import clear_cache
+			clear_cache(self.doc.page_name)
+		
+	def get_contacts(self,nm):
+		if nm:
+			contact_details =webnotes.conn.convert_to_lists(sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm))
+			return contact_details
+		else:
+			return ''
+			
+	def prepare_template_args(self):
+		address = webnotes.conn.get_value("Address", 
+			{"sales_partner": self.doc.name, "is_primary_address": 1}, 
+			"*", as_dict=True)
+		if address:
+			city_state = ", ".join(filter(None, [address.city, address.state]))
+			address_rows = [address.address_line1, address.address_line2,
+				city_state, address.pincode, address.country]
+				
+			self.doc.fields.update({
+				"email": address.email_id,
+				"partner_address": filter_strip_join(address_rows, "\n<br>"),
+				"phone": filter_strip_join(cstr(address.phone).split(","), "\n<br>")
+			})
diff --git a/setup/doctype/sales_partner/sales_partner.txt b/setup/doctype/sales_partner/sales_partner.txt
index 81c7500..6fdeb69 100644
--- a/setup/doctype/sales_partner/sales_partner.txt
+++ b/setup/doctype/sales_partner/sales_partner.txt
@@ -1,8 +1,8 @@
 [
  {
-  "creation": "2013-01-10 16:34:24", 
+  "creation": "2013-04-12 15:34:06", 
   "docstatus": 0, 
-  "modified": "2013-01-22 15:04:05", 
+  "modified": "2013-06-13 14:40:04", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -25,6 +25,7 @@
   "permlevel": 0
  }, 
  {
+  "amend": 0, 
   "doctype": "DocPerm", 
   "name": "__common__", 
   "parent": "Sales Partner", 
@@ -40,14 +41,6 @@
   "name": "Sales Partner"
  }, 
  {
-  "description": "Note: You Can Manage Multiple Address or Contacts via Addresses & Contacts", 
-  "doctype": "DocField", 
-  "fieldname": "basic_info", 
-  "fieldtype": "Section Break", 
-  "label": "Sales Partner Details", 
-  "oldfieldtype": "Section Break"
- }, 
- {
   "doctype": "DocField", 
   "fieldname": "partner_name", 
   "fieldtype": "Data", 
@@ -71,6 +64,14 @@
  }, 
  {
   "doctype": "DocField", 
+  "fieldname": "territory", 
+  "fieldtype": "Link", 
+  "label": "Territory", 
+  "options": "Territory", 
+  "reqd": 1
+ }, 
+ {
+  "doctype": "DocField", 
   "fieldname": "column_break0", 
   "fieldtype": "Column Break", 
   "oldfieldtype": "Column Break", 
@@ -87,14 +88,6 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "territory", 
-  "fieldtype": "Link", 
-  "label": "Territory", 
-  "options": "Territory", 
-  "reqd": 1
- }, 
- {
-  "doctype": "DocField", 
   "fieldname": "address_contacts", 
   "fieldtype": "Section Break", 
   "label": "Address & Contacts"
@@ -162,7 +155,67 @@
   "options": "Budget Distribution"
  }, 
  {
-  "amend": 0, 
+  "doctype": "DocField", 
+  "fieldname": "website", 
+  "fieldtype": "Section Break", 
+  "label": "Website"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "show_in_website", 
+  "fieldtype": "Check", 
+  "label": "Show In Website"
+ }, 
+ {
+  "depends_on": "eval:cint(doc.show_in_website)", 
+  "doctype": "DocField", 
+  "fieldname": "section_break_17", 
+  "fieldtype": "Section Break"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "logo", 
+  "fieldtype": "Select", 
+  "label": "Logo", 
+  "options": "attach_files:"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "partner_website", 
+  "fieldtype": "Data", 
+  "label": "Partner's Website"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "column_break_20", 
+  "fieldtype": "Column Break"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "page_name", 
+  "fieldtype": "Data", 
+  "label": "Page Name", 
+  "read_only": 1
+ }, 
+ {
+  "depends_on": "eval:cint(doc.show_in_website)", 
+  "doctype": "DocField", 
+  "fieldname": "section_break_22", 
+  "fieldtype": "Section Break"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "introduction", 
+  "fieldtype": "Text", 
+  "label": "Introduction"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "description", 
+  "fieldtype": "Text Editor", 
+  "label": "Description"
+ }, 
+ {
   "cancel": 0, 
   "create": 0, 
   "doctype": "DocPerm", 
@@ -170,7 +223,6 @@
   "write": 0
  }, 
  {
-  "amend": 0, 
   "cancel": 0, 
   "create": 0, 
   "doctype": "DocPerm", 
@@ -178,18 +230,10 @@
   "write": 0
  }, 
  {
-  "amend": 0, 
   "cancel": 1, 
   "create": 1, 
   "doctype": "DocPerm", 
   "role": "Sales Master Manager", 
   "write": 1
- }, 
- {
-  "cancel": 1, 
-  "create": 1, 
-  "doctype": "DocPerm", 
-  "role": "System Manager", 
-  "write": 1
  }
 ]
\ No newline at end of file
diff --git a/website/helpers/partner.py b/website/helpers/partner.py
new file mode 100644
index 0000000..cfe66b9
--- /dev/null
+++ b/website/helpers/partner.py
@@ -0,0 +1,11 @@
+# Copyright (c) 2012 Web Notes Technologies Pvt Ltd.
+# License: GNU General Public License (v3). For more information see license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+def get_partner_args():
+	return {
+		"partners": webnotes.conn.sql("""select * from `tabSales Partner`
+			where show_in_website=1 order by name asc""", as_dict=True),
+	}
\ No newline at end of file
diff --git a/website/templates/html/partner_page.html b/website/templates/html/partner_page.html
new file mode 100644
index 0000000..4910d07
--- /dev/null
+++ b/website/templates/html/partner_page.html
@@ -0,0 +1,28 @@
+{% extends "app/website/templates/html/page.html" %}
+
+{% block content %}
+	<div class="col col-lg-12" itemscope itemtype="http://schema.org/Organization">
+		<div class="row">
+			<div class="col col-lg-4">
+				{% if logo -%}
+				<img itemprop="brand" src="{{ logo }}" class="partner-logo" 
+					alt="{{ partner_name }}" title="{{ partner_name }}" />
+				<br><br>
+				{%- endif %}
+				<div>
+					<address>
+						{% if partner_website -%}<p><a href="{{ partner_website }}" 
+							target="_blank">{{ partner_website }}</a></p>{%- endif %}
+						{% if partner_address -%}<p>{{ partner_address }}</p>{%- endif %}
+						{% if phone -%}<p>{{ phone }}</p>{%- endif %}
+						{% if email -%}<p><a href="mailto:{{ email }}">{{ email }}</a></p>{%- endif %}
+					</address>
+				</div>
+			</div>
+			<div class="col col-lg-8">
+				<h3 itemprop="name" style="margin-top: 0px;">{{ partner_name }}</h3>
+				<p>{{ description }}</p>
+			</div>
+		</div>
+	</div>
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/partners.html b/website/templates/pages/partners.html
new file mode 100644
index 0000000..978987b
--- /dev/null
+++ b/website/templates/pages/partners.html
@@ -0,0 +1,30 @@
+{% extends "app/website/templates/html/page.html" %}
+
+{% set title="Sales Partners" %}
+
+{% block content %}
+	<div class="col col-lg-12">
+		<h2 id="blog-title">Sales Partners</h2>
+		<hr>
+		{% for partner_info in partners %}
+		<div class="row">
+			<div class="col col-lg-3">
+				{% if partner_info.logo -%}
+				<a href="{{ partner_info.page_name }}">
+					<img itemprop="brand" src="{{ partner_info.logo }}" class="partner-logo" 
+						alt="{{ partner_info.partner_name }}" title="{{ partner_info.partner_name }}" />
+				</a>
+				{%- endif %}
+			</div>
+			<div class="col col-lg-9">
+				<a href="{{ partner_info.page_name }}">
+					<h4>{{ partner_info.partner_name }}</h4>
+				</a>
+				<p style="color: #999">{{ partner_info.territory }} - {{ partner_info.partner_type }}</p>
+				<p>{{ partner_info.introduction }}</p>
+			</div>
+		</div>
+		<hr>
+		{% endfor %}
+	</div>
+{% endblock %}
\ No newline at end of file